簡體   English   中英

如何可靠地檢測到UIViewController已被解除

[英]How to reliablly detect that a UIViewController has been dismissed

當ViewController被解雇時我需要做的事情,即:

  • 按下“后退”時
  • 如果在UINavigationController中,則父級調用popToRootViewController
  • 當父節點調用DismissViewController時,如果它被呈現

例如,我需要取消訂閱活動,或者減少提出的警報等。

當popToRootViewController由其父級調用時,不會調用ViewWillDisappear,因此無效。

WillMoveToParentViewController僅用於View Controller包含

Dealloc並不好,因為那只是在收集垃圾時。 無論如何我都在使用c#Xamarin而且它在那里不起作用。

不再使用ViewDidUnload,無論如何都不會這樣

ViewController本身不應該關心它是如何呈現的,所以我們如何找出它何時被解雇?

這似乎是一個重要的基本要求。 例如,如果沒有這個,我們如何取消對模型事件的取消?

這是一個類似的問題,但沒有好的答案:

你能檢測到UIViewController何時被解除或彈出?

這個問題有點陳舊,但這是我得出的結論:

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM