我遇到与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视图控制器,但在打印堆栈时没有显示?
提前非常感谢!
答案 0 :(得分:0)
你向导航控制器询问vcs列表,但是第一次调用pop时,它们会改变!你应该选择一个来弹出。或者使用nav cont子类并为其添加逻辑,这样当你弹出顶部控制器时,它下面的那个(在它的viewWillAppear中)可以查询它看起来要做什么。