UINavigationController和viewWillDisappear

gab*_*m10 3 iphone objective-c ipad ios

所以我在我的应用程序中有一个UINavController,并且在用户按下后退按钮时尝试执行方法.我到处搜寻,只能找到一些在上下文中没有意义的点点滴滴.

有没有办法实现某种检查,当用户按下后退按钮以关闭当前视图时捕获?(弹出视图的viewWillDisappear方法由于某种原因永远不会被调用.我确实读过它除非你转发那个调用吗?)这听起来是对的,有没有人有任何想法或建议?提前致谢.

TPo*_*hel 6

看看吧UINavigationControllerDelegate.当UIViewController被推送到导航控制器堆栈时,只有两种方法被调用.同样,如果正在推送一个,那么可能只是弹出了一些东西.这就是我所做的调用viewDidDisappear和viewWillDisappear.

# pragma mark - UINavigationControllerDelegate Methods

- (void)navigationController:(UINavigationController *)navigationController 
  willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{
    static UIViewController *vcPointer = nil;

    // If the previous view controller is still around then let's send a viewWillDisappear message
    if (vcPointer != nil) {
        if ([vcPointer respondsToSelector:@selector(viewWillDisappear:)]) {
            [vcPointer viewWillDisappear:animated];
        }
    }

    // Keep track of a pointer to the current viewController
    vcPointer = viewController;

    [viewController viewWillAppear:animated];   
}
Run Code Online (Sandbox Code Playgroud)

此代码保持一个指针引用到被推动,使得一旦我们推一个又一个,我们可以弹出最后一个(如果它仍然存在)的最后一个视图控制器.