我需要知道我的视图控制器何时会从导航堆栈中弹出,以便我可以执行操作.
我不能使用-viewWillDisappear,因为当视图控制器因任何原因移出屏幕时会被调用(比如新的视图控制器被推到顶部).
我特别需要知道控制器何时即将弹出.
任何想法都会很棒,提前谢谢.
覆盖viewWillDisappear
显示的VC中的方法,然后检查isMovingFromParentViewController
覆盖中的标志并执行特定逻辑.在我的情况下,我隐藏了导航控制器工具栏.仍然要求你所呈现的VC理解它被推动但不完美.
尝试在您的自定义子类中覆盖willMoveToParentViewController:
(而不是viewWillDisappear:
)UIViewController
.
在视图控制器添加或从容器视图控制器中删除之前调用.
- (void)willMoveToParentViewController:(UIViewController *)parent { [super willMoveToParentViewController:parent]; if (!parent) { // `self` is about to get popped. } }
幸运的是,在调用viewWillDisappear方法时,viewController已经从堆栈中删除了,所以我们知道viewController正在弹出,因为它不再出现在self.navigationController.viewControllers中了
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) if let nav = self.navigationController { let isPopping = !nav.viewControllers.contains(self) if isPopping { // popping off nav } else { // on nav, not popping off (pushing past, being presented over, etc.) } } else { // not on nav at all } }
这对我有用.
- (void)viewDidDisappear:(BOOL)animated { if (self.parentViewController == nil) { NSLog(@"viewDidDisappear doesn't have parent so it's been popped"); //release stuff here } else { NSLog(@"PersonViewController view just hidden"); } }
我不认为有一个明确的消息,但你可以继承UINavigationController并覆盖 - popViewControllerAnimated(尽管我之前没有尝试过这个).
或者,如果没有其他对视图控制器的引用,你可以添加到它的 - dealloc吗?
你可以在这里抓住它.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if (viewController == YourAboutToAppearController) { // do something } }
这将在显示新视图之前触发.没有人感动.我一直用asinine NavigationController做魔法.您可以设置标题和按钮标题,并在那里做任何事情.