[英]Can you detect when a UIViewController has been dismissed or popped?
[英]How to reliablly detect that a UIViewController has been dismissed
當ViewController被解雇時我需要做的事情,即:
例如,我需要取消訂閱活動,或者減少提出的警報等。
當popToRootViewController由其父級調用時,不會調用ViewWillDisappear,因此無效。
WillMoveToParentViewController僅用於View Controller包含
Dealloc並不好,因為那只是在收集垃圾時。 無論如何我都在使用c#Xamarin而且它在那里不起作用。
不再使用ViewDidUnload,無論如何都不會這樣
ViewController本身不應該關心它是如何呈現的,所以我們如何找出它何時被解雇?
這似乎是一個重要的基本要求。 例如,如果沒有這個,我們如何取消對模型事件的取消?
這是一個類似的問題,但沒有好的答案:
這個問題有點陳舊,但這是我得出的結論:
-dealloc - 無法保證何時調用它。 適用於樣板代碼,但不可靠。
-viewDidDisappear&-viewWillDisappear僅在視圖停止可見時調用(想象一下;))。 所以當一次彈出一個視圖時它們是可以的,但不是popToRoot或一次彈出幾個控制器
-willMoveToParentViewController應該工作(UINavigation控制器中的viewControllers包含在該控制器中)但由於某種原因,我發現它何時被調用時會出現不一致。
-didMoveToParentViewController - 在從導航堆棧中解散的每個viewController上調用。 所以...這看起來是最可靠的地方。
我從我的模態中調用了presentsViewController.viewWillAppear來讓它知道它被解雇了。
當使用UINavigationController時,它可以通過UIViewController(或等效的)子類對象上的NavigationController屬性獲得。
當新的UIViewController加載到UINavigationController堆棧時,將調用ViewWillDisappear(bool animated)
和ViewDidDisappear(bool animated)
。
如果您在Xamarin Studio中使用故事板功能可能會有所幫助,因為NavigationController-> UIViewController關系是可視化表示的。
如果您遇到進一步的麻煩,請發布示例代碼,以便社區進一步審核。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.