你能检测到UIViewController何时被解除或弹出?

时间:2014-10-27 18:38:42

标签: ios xamarin.ios xamarin

我有一些清理需要在我的一个视图控制器被解除/弹出/卸载时在共享资源中执行?这可能是当用户点击单个屏幕上的后退按钮或者调用popToRootViewController时(在这种情况下,我理想情况下可以清除弹出的每个控制器。)

显而易见的选择是在viewDidUnload中执行此操作,但当然,这并不是卸载的工作方式。有没有办法捕获ViewController从堆栈中删除的所有情况?

编辑:忘记提及我使用Xamarin这样做,这可能会或可能不会影响答案。

4 个答案:

答案 0 :(得分:13)

override func viewDidDisappear(animated: Bool) {
    if (self.isBeingDismissed() || self.isMovingFromParentViewController()) {
        // clean up code here
    }
}

答案 1 :(得分:5)

-dealloc可能是你最好的选择。视图控制器在从堆栈中弹出时将被释放,除非您将其保留在其他位置。

viewWillDisappear:viewDidDisappear:不是很好的选择,因为它们在视图控制器不再显示时被调用,包括它在堆栈上推送其他内容时(因此它成为第二个 - 的顶)。

viewDidUnload已不再使用。从iOS 6开始,系统框架停止调用此方法。

答案 2 :(得分:1)

根据@Enricoza 的评论,如果您确实将 UIViewController 嵌入到 UINavigationController 中,请尝试以下操作:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    
    if ((navigationController?.isBeingDismissed) != nil) {
        // Add clean up code here
    }
}

答案 3 :(得分:-3)

-(void) viewDidDisappear:(BOOL)animated{

}