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

标签 iphone objective-c ios xcode

当在导航栏上按下后退按钮(返回上一屏幕,返回父 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/

相关文章:

ios - 在 UIButton 中禁用字体动画

ios - 不同设备上 int 类型的大小不同

iOS:从应用程序内收集数据有哪些限制?

ios - FBAnnotationClustering 以编程方式显示注释

ios - 创建具有相同名称的串行队列的 2 个对象是否共享相同的队列

ios - 在 swift 中设置 UILabel.text 时的 EXC_BAD_INSTRUCTION

iphone - UISearchBar inputAccessoryView 的问题

php - iphone sdk\Uxxx 到 utf-8

objective-c - NSString 从头开始​​获取 100 个字符

iphone - 如何在 Cocoa Touch 的标签中包含超链接?