You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中WKWebView didFinishNavigation不触发问题求助

问题根源

核心问题是TMAnswerView中的_answerWebView未设置navigationDelegate。WKWebView的导航回调(比如didFinishNavigation)必须依赖navigationDelegate属性才能触发,你虽然在类扩展里声明了WKNavigationDelegate协议,但没把当前类绑定为WebView的导航代理。

修复步骤
  1. 给_answerWebView绑定代理
    打开TMAnswerView.m,在customInit方法里补充代码:
-(void)customInit{
    _answerWebView.navigationDelegate = self;
}

如果customInit方法没有被调用,也可以在setAnswer:方法开头添加:

-(void)setAnswer:(TMAnswerModel *)answer{
    if (!_answerWebView.navigationDelegate) {
        _answerWebView.navigationDelegate = self;
    }
    // 原有代码...
}
  1. 确认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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:45:54