我已经实现了 WKWebView 一切都很完美。 canGoBack 值已更改,但 canGoForward 始终返回 false。如果我完全启用强制,那么它可以工作,但是当有任何转发 url 时,我想启用转发按钮。
WKWebView 不包含 webViewDidStartLoad 和 webViewDidFinishLoad 委托(delegate)方法,因此我使用 didFinish 方法。它适用于后退按钮,但前进按钮不起作用!我已经检查了 StackOverFlow 没有找到 WKWebview 的解决方案。
下面是我的代码:
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void){
buttonConfiguration(webView: webView)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
buttonConfiguration(webView: webView)
}
func buttonConfiguration(webView: WKWebView){
print("Back", webView.canGoBack)
print("Forward", webView.canGoForward)
backButton.isEnabled = webView.canGoBack
forwardButton.isEnabled = webView.canGoForward
}
仅提及代码与此问题相关 谢谢!
最佳答案
您可以使用 KVO 观察 canGoBack
和 canGoForward
的变化:
添加观察者:
self.webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil)
self.webView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoForward), options: .new, context: nil)
KVO 观察变化(此处放置启用/禁用按钮逻辑):
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let _ = object as? WKWebView {
if keyPath == #keyPath(WKWebView.canGoBack) {
print("canGoBack: \(self.webView.canGoBack)")
} else if keyPath == #keyPath(WKWebView.canGoForward) {
print("canGoForward: \(self.webView.canGoForward)")
}
}
}
启用allowsBackForwardNavigationGestures
:
webView.allowsBackForwardNavigationGestures = true
并且不要忘记在 deinit
中删除观察者。
关于ios - WKWebView canGoForward 总是返回 false swift 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68903036/