WebKit后退按钮在按下时不响应

时间:2018-10-21 22:31:46

标签: ios swift webkit

我设置了一个简单的后退按钮,以使用户在访问网页后返回。测试一下,看来后退按钮没有做任何事情:

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let stories = storyData[indexPath.row]
        guard let storyImageUrl = URL(string: stories.url) else {return}
        webView.load(URLRequest(url: storyImageUrl))
        webView.allowsBackForwardNavigationGestures = true
        view = webView

        // Back button
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.goBack))
    }

@objc func goBack() {
        if webView.canGoBack {
            webView.goBack()
        } else {
            self.navigationController?.popViewController(animated: true)
    }
}

按下按钮根本无济于事-我已经检查了各种类似的问题,并且代码看起来正确。怎么了?

1 个答案:

答案 0 :(得分:0)

您可以通过多种方式推送新的控制器,例如使用segue或从情节提要中实例化控制器。

我将向您介绍后者。 在情节提要中创建一个带有webView的ViewController,并为其指定一个情节提要ID作为WebViewController。创建一个名为WebViewController的UIViewController子类,并将其与情节提要链接。然后使用下面的代码将其推送。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let stories = storyData[indexPath.row]
        guard let storyImageUrl = URL(string: stories.url) else {return}
        let webController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "WebViewController") as! WebViewController
        webController.urlToLoad = storyImageUrl
        self.navigationController?.pushViewController(webController, animated: true)           
}

在上面的示例中,假设您当前的View控制器嵌入在UINavigationViewController中。 然后在您的WebViewController viewDidLoad中,您可以设置后退按钮

var urlToLoad: String?
override func viewDidLoad() {
       // do your stuff
       // Back button
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItem.Style.plain, target: self, action: #selector(self.goBack))
         guard let storyImageUrl = URL(string: urlToLoad) else {return}
    webView.load(URLRequest(url: storyImageUrl))

}
@objc func goBack() {
        if webView.canGoBack {
            webView.goBack()
        } else {
            self.navigationController?.popViewController(animated: true)
        }
}

您也可以使用segue。 希望对您有所帮助。