当ViewController被解雇时我需要做的事情,即:
例如,我需要取消订阅活动,或者减少提出的提醒等。
当popToRootViewController由其父级调用时,不会调用ViewWillDisappear,因此无效。
WillMoveToParentViewController仅适用于View Controller Contament
Dealloc并不好,因为那只是在收集垃圾时。无论如何我都在使用c#Xamarin而且它在那里不起作用。
不再使用ViewDidUnload,而且从来没有用过这个
ViewController本身不应该关心它是如何呈现的,所以我们如何找出它何时被解雇?
这似乎是一项重要的基本要求。例如,如果没有这个,我们如何取消对模型事件的取消?
这是一个类似的问题,但没有好的答案:
Can you detect when a UIViewController has been dismissed or popped??
答案 0 :(得分:1)
这个问题有点陈旧,但这是我得出的结论:
-dealloc - 无法保证何时调用它。适用于样板代码,但不可靠。
-viewDidDisappear& -viewWillDisappear仅在视图停止可见时调用(想象一下;))。因此,一次弹出一个视图时它们没问题,但不是popToRoot或一次弹出几个控制器
-willMoveToParentViewController应该可以工作(UINavigation控制器中的viewControllers包含在该控制器中)但由于某种原因,我发现它何时被调用时会出现不一致。
-didMoveToParentViewController - 在从导航堆栈中解散的每个viewController上调用。所以...这看起来是最可靠的地方。
答案 1 :(得分:1)
我已经从我的模态中调用了showsViewController.viewWillAppear来让它知道它被解雇了。
答案 2 :(得分:-1)
使用UINavigationController时,它可以通过UIViewController(或等效的)子类对象上的NavigationController属性获得。
当新的UIViewController加载到UINavigationController堆栈时,将调用ViewWillDisappear(bool animated)
和ViewDidDisappear(bool animated)
。
如果您在Xamarin Studio中使用故事板功能可能会有所帮助,因为NavigationController-> UIViewController关系是可视化表示的。
如果您遇到进一步的麻烦,请发布示例代码,以便社区进一步审核。