簡體   English   中英

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

[英]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.

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