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



我想调用"隐私政策";以及";用户术语";同一WkWebView控制器上的网络链接。我在初始视图控制器中定义了两个不同的按钮,当按下其中一个按钮时,我会在变量中分配相关的URL字符串。然后我通过执行segue将其传递给WkWebView控制器。请参阅下面的两个控制器。我的问题是在第一次运行时,URL返回nil,因为当我按下按钮时,它会跳到WkWebView控制器并崩溃。如果我在初始化时分配了一个默认链接,它会按预期工作。我不明白为什么它在第一次运行时不进行URL分配行。非常感谢任何帮助,因为我还找不到任何解决方案。(苹果链接只是一个例子(

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

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(可以查看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从初始控制器上的动作按钮拖动到第二控制器;为segue做准备";方法,而不处理IBaction func下的下一行来分配URL。我纠正创建了从控制器到控制器的分段,它运行得很好。

最新更新