覆盖ios后退按钮
Posted
技术标签:
【中文标题】覆盖ios后退按钮【英文标题】:Overwrite ios back button 【发布时间】:2016-04-24 09:09:01 【问题描述】:我有一个显示网页的 webView 的应用程序。网络由一个主页面和许多子页面组成。当我在主页上时,我希望导航返回按钮保持返回到前一个视图控制器的默认行为。但是当网络在子页面上时,我希望导航返回按钮将网络带到主网页。
所以我需要捕捉用户何时按下后退按钮,如果他在网页子页面上,请将他带到网页主页并防止 webView 关闭。我在想我可以使用 viewWillDisappear() 来捕捉后退按钮,但是如何防止视图关闭?
【问题讨论】:
您是否需要知道如何对 webview 组件进行测试,还是只需要知道如何使用后退按钮按结构设置它? 【参考方案1】:类似于 KickimusButticus 的回答:
如果您想使用情节提要等更轻松地完成此操作,您可以将后退按钮连接到 IBAction,如下所示:
@IBAction func back()
并对用户是否在 webview 的子页面中进行内部测试。如果是这样,您可能会弄乱网络视图。如果它们在主页上,您可以简单地使用后退按钮转到您的主视图控制器或使用 self.dismissViewControllerAnimated(true, completion: nil)
关闭该视图控制器。
【讨论】:
我实施了 KickimusButticus 的建议并且它有效。然而,我确实认为这看起来更优雅,所以我尝试了它,但我的 back() 函数永远不会被调用。我想我已经正确地连接了它,它看起来与带有后点的小圆圈一样。有什么建议我可能做错了吗? @Gongevangen 如果您正确连接它,那么每当您单击后退按钮时都应该调用它。我建议您通过查看属性检查器中的连接来检查您是否有正确的连接。也许尝试重新连接它,看看是否有效。【参考方案2】:看看这篇文章:
Execute action when back bar button of UINavigationController is pressed
在您的视图控制器代码中应该这样做:
override func viewDidLoad()
super.viewDidLoad()
self.navigationItem.hidesBackButton = true
let customBackButtonItem = UIBarButtonItem(title: "Back", style: .Bordered, target: self, action:#selector(customBackMethod(_:)))
self.navigationItem.leftBarButtonItem = customBackButtonItem
// @objc is so we can use #selector() up above
@objc func customBackMethod(sender: UIBarButtonItem)
if webView.canGoBack
webView.goBack()
请注意,如果您想要一个“后退”图像,您可能必须使用 UIBarButtonItem(image:, style:, target:, action:) 或 UIBarButtonItem(customView:)。有关详细信息,请参阅此问题和答案:https://***.com/a/36180934/892990
【讨论】:
以上是关于覆盖ios后退按钮的主要内容,如果未能解决你的问题,请参考以下文章