1

在里面navigationController,当我在一个ChildViewController和当用户点击后退按钮时。我很想parentViewController在我离开之前发送一些数据。

除了使用之外,还有什么简单的原因吗?

-(void)viewWillDisappear;

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

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

请问,有什么合理和适当的方法吗?

4

3 回答 3

4

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

-(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

于 2012-10-05T15:03:12.460 回答
2

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

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

于 2012-10-05T15:03:12.257 回答
2

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

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

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

  3. 使用父母的viewWillAppear:并检查isMovingToParentViewController属性是否只是重新出现。

并应用最适合您的价值传递条件和价值可用性的方法。

于 2012-10-05T15:05:06.200 回答