[英]Can you detect when a UIViewController has been dismissed or popped?
我有一些清理需要在我的視圖控制器之一被解除/彈出/卸載時在共享資源中執行? 這可能是當用戶點擊單個屏幕上的后退按鈕時,或者如果調用了 popToRootViewController(在這種情況下,我最好能夠清除彈出的每個控制器。)
顯而易見的選擇是在 viewDidUnload 中執行此操作,但當然,這不是卸載的工作方式。 有沒有辦法捕捉所有從堆棧中刪除 ViewController 的情況?
編輯:忘記提及我正在使用 Xamarin 執行此操作,因此可能會也可能不會影響答案。
override func viewDidDisappear(animated: Bool) {
super.viewDidDisappear(animated)
if (isBeingDismissed() || isMovingFromParentViewController()) {
// clean up code here
}
}
編輯快速 4/5
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if (isBeingDismissed || isMovingFromParent) {
// clean up code here
}
}
-dealloc
可能是你最好的選擇。 視圖控制器將在從堆棧中彈出時被釋放,除非您將其保留在其他地方。
viewWillDisappear:
和viewDidDisappear:
不是好的選擇,因為它們在視圖控制器不再顯示的任何時候都會被調用,包括當它在堆棧上推送其他東西時(因此它成為第二個)。
不再使用viewDidUnload
。 從 iOS 6 開始,系統框架停止調用此方法。
根據@Enricoza 的評論,如果您確實將 UIViewController 嵌入到 UINavigationController 中,請嘗試以下操作:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if ((navigationController?.isBeingDismissed) != nil) {
// Add clean up code here
}
}
-(void) viewDidDisappear:(BOOL)animated{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.