按下后退按钮时执行操作

时间:2012-10-05 14:59:11

标签: iphone objective-c ios xcode

navigationController内部,当我在ChildViewController时,当用户点击后退按钮时。我希望在离开之前将一些数据发送到parentViewController

除了使用

之外,为什么要这样做很简单
-(void)viewWillDisappear;

首先,因为这个ChildViewController也有自己的子项,当它被推送时,viewWillDisappear也会被调用。

其次,当我用户点击主页按钮时。它被叫了。(我猜)

请以任何合理和正确的方式进行此操作?

3 个答案:

答案 0 :(得分:4)

这是一个很好的简单解决方案,可以解决在显示modalViewControllers时调用viewWillDisappear的问题,或者推送更多的viewControllers。例如。检测我们实际上从堆栈中取出的情况。

-(void)viewWillDisappear:(BOOL)animated {
  NSUInteger ind = [[self.navigationController viewControllers] indexOfObject:self];
  if (ind == NSNotFound) {
      // do something, we're coming off the stack.
  }
}

这样做的好处是您不需要子类化UINavigationController。

来源:http://objectivesea.tumblr.com/post/21705735018/poppingoffthestack

答案 1 :(得分:2)

我会使用UINavigationControllerDelegate来解决这个问题。

在这种情况下,您可以使用它来跟踪控制器,并且可以实现navigationController:willShowViewController:animated:以在控制器之间传输所需的数据。它比尝试挂钩viewWillDisappear通知要清晰得多,因为你可以隔离该委托中的数据传输逻辑,而不是在每个控制器中都有它的部分。

答案 2 :(得分:2)

您可以通过以下任何方式执行此操作:

  1. 当第二个控制器离开并让父母听取它时发送通知。

  2. 创建一个委托协议,让第二个控制器直接引用父方法。

  3. 使用父级viewWillAppear:并检查isMovingToParentViewController属性是否只是重新显示。

  4. 并应用最适合您的价值传递条件和价值可用性的内容。