Objective-C中如何让WKWebView点击链接触发decidePolicyForNavigationAction方法
核心原因:未设置WKWebView的navigationDelegate
你已经在ViewController中声明遵循WKNavigationDelegate协议,也实现了对应的代理方法,但必须将WKWebView的navigationDelegate属性赋值为当前ViewController实例,否则系统无法将导航事件传递到代理方法。
具体修复步骤
1. 在代码中设置代理
在ViewController的viewDidLoad方法中添加以下代码:
- (void)viewDidLoad { [super viewDidLoad]; // 关键:将webview的导航代理设置为当前控制器 self.webview.navigationDelegate = self; }
2. 验证IBOutlet关联是否正确
确保storyboard/xib中的WKWebView控件已经正确关联到ViewController的webview属性:
- 检查xib/storyboard中,WKWebView的Outlet连接是否指向
LESSViewController的webview属性 - 在
viewDidLoad中打印self.webview,确认其不为nil
额外检查项
- 如果是通过代码创建WKWebView,确保初始化后立即设置
navigationDelegate:WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; self.webview = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; self.webview.navigationDelegate = self; // 必须设置 [self.view addSubview:self.webview]; - 若页面内存在iframe或锚点跳转,可通过
navigationAction.navigationType判断事件类型,确保你的逻辑覆盖所需场景:if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { // 处理用户点击链接的逻辑 }
内容的提问来源于stack exchange,提问作者thpitsch
相关产品推荐
相关产品推荐

