gpt4 book ai didi

ios - 使用来自另一个 ViewController 的新 url 重新加载 WebView

转载 作者:行者123 更新时间:2023-11-28 15:37:58 24 4
gpt4 key购买 nike

我在从另一个 View Controller 重新加载 UIWebiView 时遇到问题。当我尝试发送新的 url 并重新加载它时,应用程序因 webview 为 nil 而崩溃。

我制作了一个简单的测试应用程序来缩小我的问题范围,现在它是一个简单的页面,带有一个显示 google 的 webivew 和一个 View 上的按钮。按下按钮时,它会以模态方式显示另一个页面。该页面只有一个按钮,当按下该按钮时,它会自行消失并在第一个 View 中调用一个函数,要求使用新的 url 刷新它。这是我的代码:

class ViewController: UIViewController {

@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()

let urlRequest = NSURLRequest(URL: NSURL(string: "https://www.google.com")!)
webView.loadRequest(urlRequest)
}

@IBAction func showViewPressed(sender: AnyObject) {
let showView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("showView")
self.presentViewController(showView, animated: true, completion: nil)
}

func reloadWebView(newURL: String) {
let urlRequest = NSURLRequest(URL: NSURL(string: newURL)!)
webView.loadRequest(urlRequest)
}

}

对于第二个 View :

class ReloadViewController: UIViewController {

@IBAction func buttonPressed(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: {
ViewController().reloadWebView("https://www.yahoo.com")
})
}

}

它因 fatal error 而崩溃:在展开可选值时意外发现 nil

最佳答案

好吧,看来在我提出问题之前,我花了几个小时试图找到一个无济于事的解决方案。然后在我发布一个问题后 5 分钟,我认为我永远找不到解决方案……我找到了。所以我找到了一个用于 TableView 的解决方案 here这也恰好适用于 WebView 。因此,对于将来寻找同样东西的任何人,这是我所做的:

class ViewController: UIViewController {

@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let urlRequest = NSURLRequest(URL: NSURL(string: "https://www.google.com")!)
webView.loadRequest(urlRequest)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(reloadWebView), name:"reload", object: nil)

}

@IBAction func showViewPressed(sender: AnyObject) {
let showView = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("showView")
self.presentViewController(showView, animated: true, completion: nil)
}

func reloadWebView() {
let urlRequest = NSURLRequest(URL: NSURL(string: "https://yahoo.com")!)
webView.loadRequest(urlRequest)
}

}

对于第二个 View :

class ReloadViewController: UIViewController {

@IBAction func buttonPressed(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: {
NSNotificationCenter.defaultCenter().postNotificationName("reload", object: nil)
})
}

}

而且效果很好!

关于ios - 使用来自另一个 ViewController 的新 url 重新加载 WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com