确定出现的视图是否在导航栏中被按下或来自后退button

有没有办法来判断一个新的控制器是来自导航后退button还是被推入堆栈? 编号喜欢重新加载数据只推动导航堆栈,而不是一个后退button按下。

从iOS 5.0开始,你可以这样做:

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (self.isBeingPresented || self.isMovingToParentViewController) { // "self" is being shown for the 1st time, not because of a "back" button. } } 

如果您的推送还包括实例化视图控制器,请将您的只推逻辑放在viewDidLoad 。 它不会被callback,因为它已经被加载。

你可以实现UINavigationControllerDelegate并覆盖`navigationController:didShowViewController:animated:'方法。 然后你必须检查返回的视图控制器,以确定是否从预期的视图控制器返回。

 - (void)navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated { if (yourPushedViewController == viewController) { // Do something } }