UINavigationController后退按钮不会弹出到以前的VC

时间:2013-11-02 22:41:14

标签: ios objective-c uinavigationcontroller back-button

我遇到与this question类似的问题,但出现的原因不同。

我有一个导航控制器,其视图A> B> C> D> E。

在C中我推送到D,其中用户"创建一个新的会话"。有时用户希望向此新会话添加详细信息,因此他们会单击添加推送到E的详细信息。

如果他们没有选择添加细节,请按“完成”#34;在D上,我打电话给[navControler popViewControllerAnimated:YES];,他们最终在C中没有上述问题中提到的问题,这意味着如果在C上他们按下,它会成功转到B.但是,当他们确实添加细节时,他们会去E完成后按导航控制按钮。那时我添加了这段代码,将它们带回C:

    NSArray *allViewControllers = [[self navigationController] viewControllers];
    for (UIViewController *aViewController in allViewControllers) {
        if ([aViewController isKindOfClass:[TSessionMgmtViewController class]]) {
            [self.navigationController popToViewController:aViewController animated:NO];
        }
    }

他们最终回到C,但是当他们点击C上的后退按钮时,它会执行奇怪的后退动画,但最终会再次出现在C上。然后再次按下它们会将它们带回B.

我已经检查过以下内容: 我没有调用额外的notifications来导致额外的C被推送。 我不是以任何其他方式推动C. 我用NSLog(@"nav controller stack: %@", [[self navigationController] viewControllers]);检查了导航控制器堆栈,它没有在堆栈上显示额外的C。

这是C上的后退按钮本身的问题吗?或者是否有一些看不见的C视图控制器,但在打印堆栈时没有显示?

提前非常感谢!

1 个答案:

答案 0 :(得分:0)

你向导航控制器询问vcs列表,但是第一次调用pop时,它们会改变!你应该选择一个来弹出。或者使用nav cont子类并为其添加逻辑,这样当你弹出顶部控制器时,它下面的那个(在它的viewWillAppear中)可以查询它看起来要做什么。