未调用 WKWebView 导航委托
WKWebView Navigation Delegate Not Called
我很难让 WKWebview 调用它的委托方法,即完成的方法。
我正在尝试使用加载到 WKWebView 中的 html 生成 pdf 报告;post 生成 pdf 报告;
但是尝试那里的建议,这对我不起作用。我有一个 WKWebView 在单独的 class 中创建到将调用其方法的视图控制器。
如果我直接剥离内容并尝试简单地在 WebView 中加载网站以查看是否调用委托函数,我什么也得不到。
这是我的测试class;
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()
}
虽然如果我使用故事板将 WKWebView 作为出口放入视图控制器,那么委托方法确实会被调用。但是,我试图避免这种情况,因为我不想在视图控制器中看到 Web 视图,并且希望将所有代码单独保存在另一个 class.
中
我错过了什么吗?在 Stack Overflow 上检查各种其他 posts 并没有给我任何解决方案,除了确保设置了导航委托,我就是这样。任何帮助将不胜感激。
您需要将 let test = TestWebview ()
移动到 class 级别,否则此对象将在 viewDidLoad
完成时被驱逐:navigationDelegate
定义为 weak
, 所以它也不会阻止它。
我很难让 WKWebview 调用它的委托方法,即完成的方法。
我正在尝试使用加载到 WKWebView 中的 html 生成 pdf 报告;post 生成 pdf 报告;
但是尝试那里的建议,这对我不起作用。我有一个 WKWebView 在单独的 class 中创建到将调用其方法的视图控制器。
如果我直接剥离内容并尝试简单地在 WebView 中加载网站以查看是否调用委托函数,我什么也得不到。
这是我的测试class;
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()
}
虽然如果我使用故事板将 WKWebView 作为出口放入视图控制器,那么委托方法确实会被调用。但是,我试图避免这种情况,因为我不想在视图控制器中看到 Web 视图,并且希望将所有代码单独保存在另一个 class.
中我错过了什么吗?在 Stack Overflow 上检查各种其他 posts 并没有给我任何解决方案,除了确保设置了导航委托,我就是这样。任何帮助将不胜感激。
您需要将 let test = TestWebview ()
移动到 class 级别,否则此对象将在 viewDidLoad
完成时被驱逐:navigationDelegate
定义为 weak
, 所以它也不会阻止它。