我设置了一个简单的后退按钮,以使用户在访问网页后返回。测试一下,看来后退按钮没有做任何事情:
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)
}
}
按下按钮根本无济于事-我已经检查了各种类似的问题,并且代码看起来正确。怎么了?
答案 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。 希望对您有所帮助。