navigationController
内部,当我在ChildViewController
时,当用户点击后退按钮时。我希望在离开之前将一些数据发送到parentViewController
。
除了使用
之外,为什么要这样做很简单-(void)viewWillDisappear;
首先,因为这个ChildViewController
也有自己的子项,当它被推送时,viewWillDisappear
也会被调用。
其次,当我用户点击主页按钮时。它被叫了。(我猜)
请以任何合理和正确的方式进行此操作?
答案 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)
您可以通过以下任何方式执行此操作:
当第二个控制器离开并让父母听取它时发送通知。
创建一个委托协议,让第二个控制器直接引用父方法。
使用父级viewWillAppear:
并检查isMovingToParentViewController
属性是否只是重新显示。
并应用最适合您的价值传递条件和价值可用性的内容。