在iOS4中弹出视图控制器时收到通知

时间:2011-05-13 12:21:43

标签: objective-c uiviewcontroller uinavigationcontroller notifications stack

此问题之前已被问过,但我能找到的答案来自2009年,并不适合我的问题。让我重申一下这个问题。

我有一个UINavigationController产生并将许多不同的UIViewController推入其堆栈。其中一个处理一些核心数据操作,当一个特定的VC从堆栈中弹出时需要保存。不要专注于核心数据部分,而是关注弹出。

如何挂钩UIViewController将从堆栈中弹出?

  • 我希望某种委托方法,但找不到它。 UINavigationControllerDelegate协议非常稀疏。
  • 然后我开始考虑使用viewWillDisappear,但如果另一个视图被推送到堆栈,那么也会被调用,因此它不会提供正确的时刻。
  • This answered question, from 2009,选择查看我们正在“弹出”的视图控制器的viewWillAppear,但由于该调用没有引用需要执行此操作的VC检查,这是不能令人满意的,并会引入一种适得其反的依赖性(VC被几个NC使用)。
  • Another answered question, also from 2009,选择子类UINavigationController并重写popViewControllerAnimated:方法。或者使用VC的dealloc。我的直觉告诉我,这不可能是要走的路。
  • 最后有one last recent question from march 2011,但没有人愿意回答。

这使我处于目前不满意的状态。有没有人有更好的解决方案来找到你的UIViewController从UINavigationController的堆栈弹出的那一刻?

干杯,
EP。

2 个答案:

答案 0 :(得分:9)

viewWillDisappear是适当的代表。如果要确定当前视图是弹出还是视图,则需要在此方法中添加逻辑>推。这已在这里得到解答 - viewWillDisappear: Determine whether view controller is being popped or is showing a sub-view controller

答案 1 :(得分:0)

我相信我会朝这个方向走另一个方向,并试图从各个viewControllers而不是navigationController中捕获轮询。对于一个单独的viewController,获取弹出看起来像是被解除分配,并且这是完全可以连接的。

子类UIViewController,在其-dealloc中实现您的通知。请务必致电[super dealloc]

然后让每个视图都将您的新自定义视图控制器子类推入导航控制器子类。他们可以在自己的viewDidUnload中执行任何操作,然后调用[super dealloc](在这种情况下super是您的UIViewController子类)来触发通知。