我无法从其他视图控制器重新加载UIWebiView。当我尝试发送新网址并重新加载时,由于webview为零,应用程序崩溃。
我制作了一个简单的测试应用来缩小我的问题,现在它是一个简单的页面,其中webivew显示谷歌和视图上的按钮。按下按钮时,它会以模态方式显示另一页。此页面只有一个按钮,按下时,它会自动关闭并在第一个视图中调用一个函数,要求使用新的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)
}
}
和第二种观点:
class ReloadViewController: UIViewController {
@IBAction func buttonPressed(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: {
ViewController().reloadWebView("https://www.yahoo.com")
})
}
}
它与fatal error: unexpectedly found nil while unwrapping an Optional value
答案 0 :(得分:1)
好吧,所以在我问一个问题之前,我花了好几个小时试图找到一个无济于事的解决方案。然后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)
}
}
和第二种观点:
class ReloadViewController: UIViewController {
@IBAction func buttonPressed(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: {
NSNotificationCenter.defaultCenter().postNotificationName("reload", object: nil)
})
}
}
它工作得很漂亮!