【问题标题】:How to make UIWebView Links open in a UIPopover?如何使 UIWebView 链接在 UIPopover 中打开?
【发布时间】:2013-04-14 09:55:54
【问题描述】:

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

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

如果我对我要查找的内容不够清楚,请告诉我。

【问题讨论】:

    标签: html ios uiwebview uipopover


    【解决方案1】:

    你应该看看 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 参数。基本上,如果 navigationType 是 UIWebViewNavigationTypeLinkClicked(您激活链接),您只想返回“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;
    }
    

    【讨论】:

    • 我有一个简单的问题。我可能错过了一些愚蠢的事情,但是当我返回 NO 时,我在 UIWebView 中加载的 html 文件不再显示。我应该在不同的地方加载 HTML 文件吗?我目前正在将它加载到当前视图控制器的 ViewController.m 的 viewDidLoad 函数中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多