当在导航栏上按下后退按钮(返回上一屏幕,返回父 View )按钮时,我需要执行一些操作。
我可以实现一些方法来捕获事件并在屏幕消失之前触发一些操作以暂停和保存数据?
最佳答案
更新:根据一些评论,原始答案中的解决方案似乎在 iOS 8+ 的某些场景下不起作用。如果没有进一步的细节,我无法验证是否确实如此。
但是对于你们这些人来说,在这种情况下还有另一种选择。可以通过覆盖 willMove(toParentViewController:)
检测何时弹出 View Controller 。基本思想是当 parent
为 nil
时弹出 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/