如何在 IOS 中的 WkWebView 中传递不同的 URL?

How To Pass Different URLs in WkWebView in IOS?

我想在同一个 WkWebView 控制器上调用“隐私政策”和“用户条款”weblink。我在初始视图控制器中定义了两个不同的按钮,当它们中的任何一个被按下时,我在变量中分配相关的 URL 字符串。然后我通过执行 segue 将它传递给 WkWebView 控制器。请参阅下面的两个控制器。我的问题一开始是 运行, URL returns nil 因为当我按下按钮时它会跳转到 WkWebView Controller 并崩溃。如果我在初始化时分配默认值 link,它会按预期工作。我不明白为什么它不首先进行 URL 分配行 运行。非常感谢任何帮助,因为我还找不到任何解决方案。 (苹果links只是举例)

分配 URL 并执行 segues 的初始控制器:

class InfoViewController: UIViewController {

var myURL: String?

@IBAction func helpButton(_ sender: UIButton) {
}


@IBAction func privacyPolicyButton(_ sender: UIButton) {
          
    
    myURL =  "https://www.apple.com/legal/intellectual-property/piracy.html"
    

    performSegue(withIdentifier: "GoToWebView", sender: self)

}

@IBAction func termsOfUseButtton(_ sender: UIButton) {
    
     myURL = "https://www.apple.com/legal/internet-services/terms/site.html"

     performSegue(withIdentifier: "GoToWebView", sender: self)
}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      super.prepare(for: segue, sender: sender)
             if segue.identifier == "GoToWebView" {
                 let destinationVC = segue.destination as! WebViewController

                destinationVC.url = myURL

             }
         }

我的第二个控制器 (WkWebView) 查看网页link 如 Apple 文档所述:

class WebViewController: UIViewController, WKUIDelegate {

var webView: WKWebView!

var url: String?

override func loadView() {
    let webConfiguration = WKWebViewConfiguration()
    webView = WKWebView(frame: .zero, configuration: webConfiguration)
    webView.uiDelegate = self
    view = webView
}
override func viewDidLoad() {
    super.viewDidLoad()

    let myRequest = URLRequest(url: URL(string: url!)!)
    webView.load(myRequest)
}

}

您应该在设置 url 后重新加载 webView:

class WebViewController: UIViewController, WKUIDelegate {

    var url: String? {
        didSet(oldValue) {
            if self.isViewLoaded {
                let myRequest = URLRequest(url: URL(string: url!)!)
                webView.load(myRequest)
            }
        }
    }

    ...
}

我终于发现了我代码中的错误。我错误地控制了将 segue 从初始控制器上的操作按钮拖动到第二个控制器,这导致 运行 每当按下按钮而不处理下一行以分配 [=12] 时,“准备 segue”方法=] 在 IBaction 函数下。我更正了创建从控制器到控制器的 segue,它工作正常。