【问题标题】:Throwing webview request to another webview将 webview 请求抛出到另一个 webview
【发布时间】:2009-04-20 15:09:57
【问题描述】:

我有一个 UIViewController,里面有一个 UIWebView (webview1)。网页视图只有几行文本,但里面确实有一个链接。我不想在这个狭小的空间中打开指向外部网站的链接,而是将其发送到 webview2,这将是一个全屏。目标是将网络请求保留在我的应用程序中,而不是 Safari 中。我不想为 webview2 创建另一个控制器,而是使用 webview1 的控制器。

在 Webview1Controller 控制器中,我在 webViewLoad 中执行此操作:

webview1.delegate = self;

这是我将 Web 请求交给 webview2 的地方,效果很好:

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

myapp *delegate = [[UIApplication sharedApplication] delegate];
Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
//self.view = webview2;'
[delegate.navigationController pushViewController: webview1Controller animated:YES];
[webview1Controller.webview2 loadRequest:request];
[webview1Controller release];
return YES;
}

在 Interface Builder 中,我将 webview2.xib 文件的 Owner 类设置为 Webview1Controller。它的“视图”和 webview2outlet 已连接。我在 Webview1Controller 中有一个名为 webview2outlet 的 IBOutlet。

当我返回 webview1 时,它也加载了相同的请求。有没有办法阻止 webview1 加载任何东西?如果我在上述方法中返回 NO,webview1 将不会呈现我的内容。

一种解决方案就是在 viewWillAppear 上重新加载 webview1 内容,这很有效。但是有没有更好的方法?

【问题讨论】:

    标签: iphone cocoa-touch uiwebview


    【解决方案1】:

    从委托方法返回NO

    关于您的评论,我认为您想要做的是让您的委托方法检查哪个 webview 正在调用您的控制器:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
        if (webView == webview1) {
            Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
            [self.navigationController pushViewController:webview1Controller animated:YES];
            [webview1Controller.webview2 loadRequest:request];
            [webview1Controller release];
            return NO;
        }
        else {
            return YES;
        }
    }
    

    (另外请注意,UIViewController 有一个 navigationController 属性,因此您可以使用它而不是通过您的应用委托获取它)。

    【讨论】:

      【解决方案2】:

      如果您加载请求的副本而不是原始请求,然后返回 NO,会发生什么情况?

      - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
      
          myapp *delegate = [[UIApplication sharedApplication] delegate];
          Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil];
          //self.view = webview2;'
          [delegate.navigationController pushViewController: webview1Controller animated:YES];
          [webview1Controller.webview2 loadRequest:[[request copy] autorelease]];
          [webview1Controller release];
          return NO;
      }
      

      【讨论】:

      • 返回 NO 会导致 webview1 为空白。当主视图加载时,上述方法也会触发。因为它会导致一个空白的 webview1,所以永远不会有任何链接可以点击。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多