【问题标题】:WKWebView Navigation Delegate Not Called未调用 WKWebView 导航委托
【发布时间】:2022-01-21 02:42:12
【问题描述】:

我很难让 WKWebview 调用它的委托方法,即完成的方法。

我正在尝试类似于这篇文章的内容,使用加载到 WKWebView 中的 html 生成 pdf 报告;

WKWebView not calling navigation delegate methods

但是尝试那里的建议,这对我不起作用。我在一个单独的类中创建了一个 WKWebView,该类将调用其方法。

如果我直接剥离内容并尝试在 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 上有关此的各种其他帖子并没有给我任何解决方案,除了确保正在设置导航委托,我就是这样。任何帮助将不胜感激。

【问题讨论】:

    标签: swift wkwebview wknavigationdelegate


    【解决方案1】:

    您需要将let test = TestWebview () 移动到类级别,否则当viewDidLoad 完成时该对象将被逐出:navigationDelegate 被定义为weak,因此它也不会阻止它。

    【讨论】:

    • 非常感谢您成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2016-04-06
    • 2014-03-18
    相关资源
    最近更新 更多