UINavigation控制器后退按钮不会弹出到以前的VC



我有一个与这个问题类似的问题,但出现了不同的原因。

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

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

当他们不选择添加细节时,他们在 D 上按"完成",我打电话给[navControler popViewControllerAnimated:YES];,他们最终在 C 中没有上面问题中提到的问题,这意味着如果在 C 上他们按下回键,它就会成功转到 B。 但是,当他们添加详细信息时,他们会转到 E,完成后他们按下导航 ctrl 的后退按钮。 在这一点上,我添加了这段代码以将它们带回 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。

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

那么这是 C 上后退按钮本身的问题吗? 还是有一些不可见的 C 视图控制器在那里但在打印堆栈时没有显示?

提前非常感谢!

你向导航控制器询问 VC 列表,但当你第一次调用 pop 时,它们就会改变!你应该选择一个弹出。或者使用 nav cont 子类并向其添加逻辑,以便当您弹出顶部控制器时,它下面的控制器(在其视图中WillAppear)可以查询以查看它应该做什么。

相关内容

最新更新