我在从另一个 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/