使用另一个ViewController中的新URL重新加载WebView

时间:2017-05-20 22:04:34

标签: ios swift uiwebview

我无法从其他视图控制器重新加载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

崩溃

1 个答案:

答案 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)
        })
    }

}

它工作得很漂亮!