iOS - UIWebView的DidFinishLoad方法没有被调用

5
我有一个工作正常的UIWebView。委托人正在工作。当我打开一个URL时,事件shouldStartLoadWithRequestwebViewDidFinishLoad被触发。

但是例如,当我点击Google搜索结果时,只有shouldStartLoadWithRequest被触发,而webViewDidFinishLoad从未被调用。

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

这是为什么会发生的原因呢?


1
将代理设置为您的WebView。 - SAMIR RATHOD
4个回答

1
在.h文件中添加<UIWebViewDelegate>,在.m文件中:
yourWebview=[[UIWebView alloc]init];
yourWebview.delegate=self;

@Thedude:我知道。但他还没有发布任何代码。所以我只能猜测可能性。而上面似乎是最好的可能性。 - V-Xtreme

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;
}

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接