如何判断我的ViewController何时再次成为堆栈顶部?

Tra*_*ggs 2 uinavigationcontroller ios segue ios7

当使用a时UINavigationController,当用户"深入潜水"(推动堆叠中的另一个控制器)时,我有机会处理

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
Run Code Online (Sandbox Code Playgroud)

但是我该如何处理相反的事情呢?当用户按下后退按钮,并且控制器再次成为顶级控制器时,我希望它可能会更新某些状态,因为堆栈上的控制器可能已经改变了我想在现在可见的控制器中反映的一些内容.

或者,通过模拟,当我使用模态segue来呈现新的控制器时,我会选择一种方法,当呈现的控制器退出时,该方法被称为展开segue.如何使用导航堆栈管理控制器?

(随意在这上面写一个更好的标题)

Tra*_*ggs 5

事实证明,您可以根据对响应的歧义消除歧义isMovingToParentViewController.如果它是YES你的控制器刚刚放在堆栈的最顶层.如果是NO,您的控制器将返回到最顶层,然后弹出另一个顶部.例:

-(void)viewWillAppear:(BOOL)animated{
    if (self.isMovingToParentViewController == NO) { // returning from even higher controller
        [self updateForChangesThatMayHaveHappenedInSubController];
    }
    [super viewWillAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)