2

我目前在 UIWebView 中加载了一个简单的 HTML 文件,并在文件的文本中嵌入了一堆链接。我想知道是否有办法让这些链接在 UIPopover 中打开。

这些链接指向另一个 HTML 文件,因此我希望它们加载到 UIPopover 中,其中包含 UIWebView。

如果我对我在寻找什么还不够清楚,请告诉我。

4

1 回答 1

3

你应该看看 UIWebViewDelegate 这个方法

- (BOOL)webView:(UIWebView *)webView
            shouldStartLoadWithRequest:(NSURLRequest *)request
                        navigationType:(UIWebViewNavigationType)navigationType

每当用户触发链接时,都会调用它

因此,将包含 UIWebView 的 viewController 放入该 webView 的委托中,并实现此方法。

如果有一个 BOOL 返回值。如果您返回“NO”,则 webview 本身不会尝试处理链接,因此您可以控制它。

(NSURLRequest *)request给你实际的链接...

所以从这里你可以触发一个带有内容 viewController 的 UIPopover... 它可以包含一个 UIWebView,你可以在其中加载你的链接数据。

(有趣的是你现在应该问这个问题,我现在正在实施类似的东西..)

更新

正如您所注意到的,这里有一个微妙之处需要观察。当您的 UIWebView 第一次加载它的内容时(例如在 viewDidLoad 上),将调用此委托方法。如果您NO在这种情况下返回,初始内容将不会加载,并且您将拥有一个神秘的空白 webView。

要解决此问题,您需要考虑navigationType参数。UIWebViewNavigationTypeLinkClicked基本上,如果 navigationType 是(您激活链接),您只想返回“NO” 。否则你想返回YES(webView 应该加载它的内容)。

因此,该方法的完整实现可能如下所示

-               (BOOL)webView:(UIWebView *)webView
   shouldStartLoadWithRequest:(NSURLRequest *)request
               navigationType:(UIWebViewNavigationType)navigationType
{
  BOOL result = YES;
    if (navigationType=UIWebViewNavigationTypeLinkClicked){
        [self launchPopOverWithRequest:request]
        result =  NO;
   }
   return result;
}
于 2013-04-14T00:37:18.393 回答