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

Xcode 14中Objective-C项目为WKWebView创建代理Outlet的方法

解决WKWebView在Storyboard中设置Delegate Outlet的问题

先直白说下Delegate是什么

WKWebView的WKNavigationDelegate(对应你看到的delegate)和UIWebView的delegate作用一致:就是让你的代码能收到网页状态变化的通知——比如网页开始加载、加载完成、加载失败,或是用户点击链接跳转时,你的代码可以响应这些事件。要复刻原WebView的行为,就得把这个代理关联好,同时替换对应的代理方法。

步骤:在Storyboard中设置WKWebView的Delegate Outlet

  1. 先配置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类名即可。

  2. 回到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:30:24