Objective-C中WKWebView didFinishNavigation不触发问题求助
问题根源
核心问题是TMAnswerView中的_answerWebView未设置navigationDelegate。WKWebView的导航回调(比如didFinishNavigation)必须依赖navigationDelegate属性才能触发,你虽然在类扩展里声明了WKNavigationDelegate协议,但没把当前类绑定为WebView的导航代理。
修复步骤
- 给
_answerWebView绑定代理
打开TMAnswerView.m,在customInit方法里补充代码:
-(void)customInit{ _answerWebView.navigationDelegate = self; }
如果customInit方法没有被调用,也可以在setAnswer:方法开头添加:
-(void)setAnswer:(TMAnswerModel *)answer{ if (!_answerWebView.navigationDelegate) { _answerWebView.navigationDelegate = self; } // 原有代码... }
- 确认Storyboard连接有效性
检查Storyboard里TMAnswerView的answerWebViewIBOutlet是否正确连接到代码中的_answerWebView属性,避免因连接失效导致代理设置不生效。
额外说明
UIWebView用单一的delegate属性处理所有回调,但WKWebView把导航相关的回调拆分到了navigationDelegate,其他交互类回调(比如JS交互)则在uiDelegate里——这是两者的核心区别之一。你之前UIWebView的webViewDidFinishLoad能正常工作,是因为当时正确设置了delegate,但迁移到WKWebView时漏掉了navigationDelegate的绑定。
另外,如果你希望TMQuestionView里的webView和webviewExplanations也能正常触发didFinishNavigation,同样要给它们设置代理,比如在TMQuestionView.m的customInit里补充:
-(void)customInit{ [[CSLoadingManager sharedManager] addLoadingViewToView:_viewForLoading withColor:TMBaseColor(1)]; _images = [NSMutableArray new]; // 补充代理绑定 _webView.navigationDelegate = self; _webviewExplanations.navigationDelegate = self; }
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

