ios - UIWebView DidFinishLoad未被调用

时间:2013-04-12 10:31:54

标签: iphone ios objective-c uiwebview uiwebviewdelegate

我有UIWebView可以正常使用。代表正在工作。当我打开网址时,会触发事件shouldStartLoadWithRequestwebViewDidFinishLoad

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

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

知道为什么会这样吗?

4 个答案:

答案 0 :(得分:1)

<。>在.h文件中添加<UIWebViewDelegate>

和.m:

yourWebview=[[UIWebView alloc]init];
yourWebview.delegate=self;

答案 1 :(得分: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;
}

答案 2 :(得分:1)

这个问题通常可以在ipad应用程序中找到....但是你可以通过使用[self performselector:afterdelay]来解决你的问题,你必须使用[m_pWebview loaded]检查webview是否已加载的选择器方法;并根据那个执行指示器停止....这不是正确的解决方案,但它的工作原理.......

答案 3 :(得分:0)

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