5

我有一个UIWebView工作正常。代表正在工作。当我打开一个 URL 时,事件shouldStartLoadWithRequest并被webViewDidFinishLoad触发。

但是,例如,当我单击 Google 搜索结果时,只会shouldStartLoadWithRequest被触发,并且webViewDidFinishLoad永远不会被调用。

这会导致问题,因为如果我在 上放置“正在加载...”指示器shouldStartLoadWithRequest,在这些情况下,即使页面正确加载,指示器仍然存在。

知道为什么会这样吗?

4

4 回答 4

1

在 .h 文件中添加<UIWebViewDelegate>

并以 .m 为单位:

yourWebview=[[UIWebView alloc]init];
yourWebview.delegate=self;
于 2013-04-12T10:38:47.713 回答
1

当你点击搜索时,navigationType 是 UIWebViewNavigationTypeFormSubmitted。所以在这种情况下,返回类型应该是 YES。如果不是,则不会触发 webViewDidFinishLoad 方法。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"shouldStartLoadWithRequest");

    if ( navigationType == UIWebViewNavigationTypeLinkClicked ){
        NSLog(@"UIWebViewNavigationTypeLinkClicked");

        return YES;
    } 
    if (navigationType ==UIWebViewNavigationTypeFormSubmitted ) {
        NSLog(@"UIWebViewNavigationTypeFormSubmitted");
        return YES;
    }
    if (navigationType ==UIWebViewNavigationTypeBackForward) {
        NSLog(@"UIWebViewNavigationTypeBackForward");
        return YES;
    }
    if (navigationType ==UIWebViewNavigationTypeFormResubmitted) {
        NSLog(@"UIWebViewNavigationTypeFormResubmitted");
        return YES;
    }
    if (navigationType ==UIWebViewNavigationTypeReload) {
        NSLog(@"UIWebViewNavigationTypeReload");
        return YES;
    }



    return YES;
}
于 2013-04-12T10:46:01.460 回答
1

此问题通常在 ipad 应用程序中发现....但您可以使用 [self performselector:afterdelay] 解决您的问题,您必须使用 [m_pWebview loaded] 检查选择器方法是否已加载 webview;并根据该执行指标停止....这不是正确的解决方案,但它可以工作....

于 2013-04-12T11:27:13.840 回答
0

不是 Google API 专家,但我怀疑这可能是您的原因

于 2013-04-12T10:53:11.813 回答