iphone - 检测导航栏上的 'back' 按钮何时被按下

当在导航栏上按下后退按钮(返回上一屏幕,返回父 View )按钮时,我需要执行一些操作。

我可以实现一些方法来捕获事件并在屏幕消失之前触发一些操作以暂停和保存数据?

最佳答案

更新:根据一些评论,原始答案中的解决方案似乎在 iOS 8+ 的某些场景下不起作用。如果没有进一步的细节,我无法验证是否确实如此。

但是对于你们这些人来说,在这种情况下还有另一种选择。可以通过覆盖 willMove(toParentViewController:) 检测何时弹出 View Controller 。基本思想是当 parentnil 时弹出 View Controller 。

查看 "Implementing a Container View Controller"了解更多详情。


从 iOS 5 开始,我发现处理这种情况的最简单方法是使用新方法 - (BOOL)isMovingFromParentViewController:

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];

  if (self.isMovingFromParentViewController) {
    // Do your stuff here
  }
}

- (BOOL)isMovingFromParentViewController 在导航堆栈中推送和弹出 Controller 时有意义。

但是,如果您正在展示模态视图 Controller ,您应该使用 - (BOOL)isBeingDismissed 代替:

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];

  if (self.isBeingDismissed) {
    // Do your stuff here
  }
}

如 this question 中所述,您可以结合这两个属性:

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];

  if (self.isMovingFromParentViewController || self.isBeingDismissed) {
    // Do your stuff here
  }
}

其他解决方案依赖于 UINavigationBar 的存在。相反,我更喜欢我的方法,因为它将需要执行的任务与触发事件的操作(即按下后退按钮)分离。

关于iphone - 检测导航栏上的 'back' 按钮何时被按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8228411/

相关文章:

objective-c - Swift 中的只读和非计算变量属性

objective-c - "Receiver type ' CALayer' 例如消息是前向声明”

ios - NSLocalizedString() 的第二个参数是什么?

objective-c - 这个 gdb 输出是什么意思?

objective-c - 如何使一个类符合 Swift 中的协议(protocol)?

iphone - 使用 CALayers 的圆形 UIView - 只有一些角落 - 如何?

ios - 如何将 NSAppTransportSecurity 添加到我的 info.plist

objective-c - Objective-C 中的选择器?

objective-c - Xcode 不显示导致崩溃的行

ios - 如何使用 NSCache