0

我有一个 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 内容,这很有效。但是有更好的方法吗?

4

2 回答 2

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

于 2009-04-20T15:57:05.017 回答
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;
}
于 2009-04-20T16:52:32.513 回答