【问题标题】:How to open a link from one UIWebView to another UIWebView?如何打开从一个 UIWebView 到另一个 UIWebView 的链接?
【发布时间】:2014-07-08 14:56:32
【问题描述】:

我正在构建一个 iOS 应用程序。
我在 UIWebView 中有带有超链接的 HTML 内容,但我无法打开指向另一个 UIWebView 的链接。
我使用UIWebView 作为ViewController 的子视图。代码如下:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    switch (navigationType) {
        case UIWebViewNavigationTypeLinkClicked: { //this is when a user tap is detected
            //write the handling code here.
            isWebViewLoaded = false; //set this to false only if you open another view  controller.
            return NO; //prevent tapped URL from loading inside the UIWebView.
        }

        // some other typical parameters within a UIWebView. Use what is needed
        case UIWebViewNavigationTypeFormResubmitted: return YES;
        case UIWebViewNavigationTypeReload: return YES;

        //for all other cases, including UIWebViewNavigationTypeOther called when UIWebView is loading for the first time
        default: {
            if (!isWebViewLoaded) { 
                isWebViewLoaded = true; 
                return YES; 
            }
            else 
                return NO;
        } 
    }
} 

【问题讨论】:

  • 那么你是说要在单独的 UIWebView 中打开链接?
  • 似乎您的代码来自:cloudfields.net/blog/uiwebview-link-interceptor,无论如何,一旦您拦截了为什么不能简单地使用被捕获的 URL 打开一个新的 uiwebview ? - 你有所有的信息
  • 如果您解释为什么需要这样做,我们将能够为您提供更好的帮助。
  • 嗨,克里斯,谢谢!,由于是 iOS 开发的新手,我不知道如何使用此代码来满足我的要求。
  • 上面的代码不起作用,链接是可点击的,但没有任何事件,我想要当用户点击链接并且它在新的 UIWebView 中打开并带有返回按钮。

标签: ios objective-c webview uiscrollview


【解决方案1】:

您只需要使用 Web 视图连接到新控制器,并将请求传递给它。所以在你的第一种情况下是这样的,

 case UIWebViewNavigationTypeLinkClicked: { //this is when a user tap is detected
            [self performSegueWithIdentifier:@"Next" sender:request];
            isWebViewLoaded = false; //set this to false only if you open another view  controller.
            return NO; //prevent tapped URL from loading inside the UIWebView.
        }

注意 performSegueWithIdentifier:sender: 中的 sender 参数是委托方法返回的请求。将此请求传递给您要转到的视图控制器中的属性,

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSURLRequest *)sender {
    NextViewController *next = segue.destinationViewController;
    next.request = sender;
}

最后,使用该请求在 NextViewController 中加载 Web 视图。

【讨论】:

  • 谢谢! rdelmar,我已经应用了你的代码,但它显示错误:-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSURLRequest *)sender { UIWebView *next = segue.destinationViewController; next.request = 发件人; //error:赋值给只读属性 }
  • @Daljeet,这行是错误的,而不是我在回答中的内容--"UIWebView *next = segue.destinationViewController;" "next" 应该是具有 Web 视图的视图控制器在它看来,不是 UIWebView。
  • @rdekmar,我也应用了 UIViewController 但发生了同样的错误。 UIViewController *next = segue.destinationViewController; next.request = 发件人; //error:赋值给只读属性
  • @Daljeet,通过编辑更新您的问题以显示您现在使用的代码。您也不应该使用 UIViewController (我的答案中也没有 - 请仔细阅读)。你需要有一个 UIViewController 的子类,这样你就可以在它的 .h 文件中添加一个名为“request”的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多