2009-04-20 43 views
0

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

在Webview1Controller控制器,我为此在webViewLoad:

webview1.delegate = self; 

这里就是我的手离开网络请求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; 
} 

在界面生成器,我有webview2 .xib文件的所有者类设置为Webview1Controller。这是“查看”和webview2outlet连接。我在Webview1Controller中有一个名为webview2outlet的IBOutlet。

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

一个解决方案就是重新加载viewWillAppear上的webview1内容,它可以工作。但是有更好的方法吗?

回答

1

从委托方法返回NO

关于你的评论,我觉得你想要做的是使该网页流量是调用您的控制器的委托方法检查什么:

- (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属性,以便您可以使用而不是通过你的应用程序委托来获取它)。

+0

请参阅下面的注释。 – 4thSpace 2009-04-20 18:25:29

+0

查看编辑答案 - 发表评论有点长。 – 2009-04-20 18:37:12

0

如果您加载请求的副本而不是原件,然后返回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; 
}