1

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

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

在 CI 中推送到 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。

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

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

提前非常感谢!

4

1 回答 1

0

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

于 2013-11-03T13:21:13.720 回答