【问题标题】:How to actually catch when back button is pressed?按下后退按钮时如何实际捕捉?
【发布时间】:2015-12-14 20:40:15
【问题描述】:

有很多答案,但他们不回答问题。比如我把下面的代码放进去:

    override func viewWillDisappear(animated: Bool) {
    if (self.navigationController!.viewControllers.indexOf(self)==nil) {
        print("back button pressed\n")
    }
    super.viewWillDisappear(animated)
}

但是即使没有按下后退按钮,“按下后退按钮”也会打印到控制台。场景具有使用展开转场返回前一个场景的按钮,这些按钮会导致打印“按下后退按钮”。只有按下后退按钮时,我才需要执行代码。

为 Muneeba 编辑:

import UIKit

class NewViewController: UIViewController, UINavigationBarDelegate {


func navigationBar(navigationBar: UINavigationBar, didPopItem item: UINavigationItem) {
    performSegueWithIdentifier("returnToStepOne", sender: self)
    delegate.backFromNewViewController()
}
override func viewDidLoad() {
    super.viewDidLoad()
    // self.navigationController.navigationBar.delegate = self;
    navigationController?.navigationBar.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

【问题讨论】:

  • 最佳解决方案是在导航栏中隐藏默认backButtonItem,并添加自定义ButtonItem 并为其指定导航返回的操作。
  • @DipenPanchasara 还有其他方法吗?显示的后退按钮很好。我不想重新创建它。
  • 我建议的方式是最好的方式,否则你需要检查你在哪里导航,为每个导航设置条件。
  • 你可以用你自己的后退按钮覆盖后退按钮,然后调用一个函数来执行背景动画和任何你想要的。

标签: ios swift segue


【解决方案1】:

尝试关注UINavigationBarDelegate

 func navigationBar(navigationBar: UINavigationBar, didPopItem item: UINavigationItem)

【讨论】:

  • 这应该在按下后退按钮时发生吗?因为我在这个函数的主体中放了一个打印语句,当我点击后退按钮时它从未被打印出来。
  • 您是否将 UINavigationBar 的委托设置为您实现该方法的控制器?
  • 我不明白。我该怎么做?
  • 在您的第二个视图控制器中,具有后退按钮的控制器,在您的视图中写入以下行确实加载并实现了上述答案中提到的方法。 self.navigationController.navigationBar.delegate = self;
  • 首先它说它没有打开,我添加了一个!。然后它说不能将 ViewController 类型的值分配给 UINavigationBarDelegate。所以我将 UINavigationBarDelegate 添加到类继承列表中。它编译但给出了这个错误:*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在控制器管理的 UINavigationBar 上手动设置委托。”
猜你喜欢
  • 2012-06-04
  • 1970-01-01
  • 2011-11-16
  • 2011-01-22
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多