WKWebView导航委派未调用



我很难让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,因此它也不会阻止它。

最新更新