从UIWebView切换到WKWebView代理

tda*_*tda 1 uiwebview swift wkwebview

相当于什么

webView.delegate = self
Run Code Online (Sandbox Code Playgroud)

在WKWebView中?我有

webView2.UIDelegate = self
Run Code Online (Sandbox Code Playgroud)

但它没有按预期工作.

小智 6

您可以使用键值观察来监视WKWebView的canGoBack和canGoForward.

SWIFT 3

向WKWebView添加两个键值观察器.

let webView = WKWebView(frame: view.frame)
view.addSubview(webView)

webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil)
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward), options: .new, context: nil)
Run Code Online (Sandbox Code Playgroud)

现在,在视图控制器中实现observeValue(forKeyPath :)方法.

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

    if keyPath == #keyPath(WKWebView.canGoBack) || keyPath == #keyPath(WKWebView.canGoForward) {
        // Do Something...
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,您可以将这样的内容添加到按钮的更改色调颜色中.

backButton.imageView?.tintColor = webView.canGoBack ? UIColor.blue : UIColor.gray
forwardButton.imageView?.tintColor = webView.canGoBack ? UIColor.blue : UIColor.gray
Run Code Online (Sandbox Code Playgroud)

我通过阅读这里的文章找到了这种方法.

https://www.hackingwithswift.com/example-code/wkwebview/how-to-monitor-wkwebview-page-load-progress-using-key-value-observing