Xcode 14中Objective-C项目为WKWebView创建代理Outlet的方法
解决WKWebView在Storyboard中设置Delegate Outlet的问题
先直白说下Delegate是什么
WKWebView的WKNavigationDelegate(对应你看到的delegate)和UIWebView的delegate作用一致:就是让你的代码能收到网页状态变化的通知——比如网页开始加载、加载完成、加载失败,或是用户点击链接跳转时,你的代码可以响应这些事件。要复刻原WebView的行为,就得把这个代理关联好,同时替换对应的代理方法。
步骤:在Storyboard中设置WKWebView的Delegate Outlet
先配置ViewController头文件
打开你的ViewController的.h文件,导入WebKit框架,让ViewController遵守WKNavigationDelegate协议,同时声明WKWebView的IBOutlet:#import <UIKit/UIKit.h> #import <WebKit/WebKit.h> @interface YourViewController : UIViewController <WKNavigationDelegate> @property (nonatomic, weak) IBOutlet WKWebView *wkWebView; @end把
YourViewController换成你实际的ViewController类名即可。回到Storyboard关联代理
- 选中你添加的WKWebView,点击右侧面板的「Connections Inspector」(带箭头的图标,在最右侧面板)
- 在面板里找到「delegate」项,按住它右侧的小圆圈,拖拽到Storyboard里的ViewController对象上(可以拖到顶部灰色导航条,或是左侧文档大纲里的ViewController)
- 松开鼠标后,选择弹出菜单里的
delegate选项,代理就关联完成了
补充:替换原UIWebView的代理方法
WKWebView用的是WKNavigationDelegate协议,和UIWebView的UIWebViewDelegate方法不通用,需要替换成对应方法:
- 原
webViewDidStartLoad:→ 替换为webView:didStartProvisionalNavigation: - 原
webViewDidFinishLoad:→ 替换为webView:didFinishNavigation: - 原
webView:didFailLoadWithError:→ 替换为webView:didFailNavigation:withError:
举个例子,原来的UIWebView加载完成方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView { // 你的业务代码 }
换成WKWebView的写法:
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { // 你的业务代码 }
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

