【问题标题】:Overwrite ios back button覆盖ios后退按钮
【发布时间】:2016-04-24 09:09:01
【问题描述】:

我有一个显示网页的 webView 的应用程序。网络由一个主页面和许多子页面组成。当我在主页上时,我希望导航返回按钮保持返回到前一个视图控制器的默认行为。但是当网络在子页面上时,我希望导航返回按钮将网络带到主网页。

所以我需要捕捉用户何时按下后退按钮,如果他在网页子页面上,请将他带到网页主页并防止 webView 关闭。我在想我可以使用 viewWillDisappear() 来捕捉后退按钮,但是如何防止视图关闭?

【问题讨论】:

  • 您是否需要知道如何对 webview 组件进行测试,还是只需要知道如何使用后退按钮按结构设置它?

标签: ios swift


【解决方案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://stackoverflow.com/a/36180934/892990

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多