我遇到类似于this question的问题,但显示的原因不同。UINavigationController后退按钮不会弹出到先前的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以任何其他方式 我用NSLog检查了导航控制器堆栈(@“nav controller stack:%@”,[[self navigationController] viewControllers]);并且它不会在堆栈上显示额外的C。
所以这是一个与后面的按钮本身在C上的问题?还是有一些不可见的C视图控制器在那里,但打印堆栈时不显示?
非常感谢!
你在哪里添加了你发布的代码?你不应该改变后退按钮的行为,如果这是你所做的 - 它只是回到前一个控制器,它不应该跳过控制器。如果你想直接从E到C,你应该有一个自定义按钮来做到这一点。 – rdelmar
@rdelmar我在viewWillDownappear中添加了它E. – roro
正如我在我的评论中所说的,你不应该改变后退按钮的行为 - 用户期望这会让他们回到一个控制器,而不是两个。我会添加一个自定义按钮(在E中)来替换后退按钮,并将您发布的代码添加到其操作方法中,而不是将其放在viewDidDisappear中。我认为这应该工作。 – rdelmar