2013-11-02 42 views
1

我遇到类似于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视图控制器在那里,但打印堆栈时不显示?

非常感谢!

+2

你在哪里添加了你发布的代码?你不应该改变后退按钮的行为,如果这是你所做的 - 它只是回到前一个控制器,它不应该跳过控制器。如果你想直接从E到C,你应该有一个自定义按钮来做到这一点。 – rdelmar

+0

@rdelmar我在viewWillDownappear中添加了它E. – roro

+0

正如我在我的评论中所说的,你不应该改变后退按钮的行为 - 用户期望这会让他们回到一个控制器,而不是两个。我会添加一个自定义按钮(在E中)来替换后退按钮,并将您发布的代码添加到其操作方法中,而不是将其放在viewDidDisappear中。我认为这应该工作。 – rdelmar

回答

0

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

相关问题