我很难让WKWebview调用其委托方法,即did-finish方法。
我正在尝试类似于这篇文章的东西,使用加载到WKWebView中的html生成pdf报告;
WKWebView未调用导航委托方法
然而,尝试一下那里的建议,这对我来说并不奏效。我有一个WKWebView,它是在View控制器的一个单独的类中创建的,它将调用它的方法。
如果我直接把东西去掉,只是试着在WebView中加载一个网站,看看是否调用了委托函数,我什么也得不到。
这是我的测试课;
import UIKit
import WebKit
class TestWebview: NSObject {
let webView = WKWebView ()
func loadWebsite () {
print ("LOAD TEST CALLED")
webView.navigationDelegate = self
let link = URL(string: "https://www.apple.com")!
let request = URLRequest(url: link)
webView.load(request)
}
}
extension TestWebview: WKNavigationDelegate {
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print ("DID COMMIT")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print ("FINISHED LOADING")
}
}
以下是我如何在一个单独的视图控制器中调用它;
override func viewDidLoad() {
super.viewDidLoad()
let test = TestWebview ()
test.loadWebsite()
}
尽管如果我使用Storyboards将WKWebView作为出口放入视图控制器,那么会调用委托方法。然而,我试图避免这种情况,因为我不想在视图控制器中看到web视图,并且希望在另一个类中单独保存该视图的所有代码。
我是不是错过了什么?检查Stack Overflow上关于这一点的其他帖子并没有给我任何解决方案,除了确保导航代理正在设置之外,我就是这样。如果有任何帮助,我将不胜感激。
您需要将let test = TestWebview ()
移动到类级别,否则当viewDidLoad
完成时,此对象将被逐出:navigationDelegate
被定义为weak
,因此它也不会阻止它。