popToRootViewControllerAnimated之后无法隐藏后退按钮

时间:2013-01-02 08:37:48

标签: ios uinavigationcontroller

我正在使用一个NavigationController,它的第一个视图控制器是一个没有任何UI的“决策者”类。因此,以root作为根,检查本地数据库,如果我们有某些项目,决策者VC将推送某个VC,或者如果没有项目,它将推送不同的VC。所以它真的像一棵有两个分支的树。

在分支1的某个点,我们有几个VC被推入堆栈,用户可能会删除最后一个“项目”,因此我想调用popToRootViewControllerAnimated并让我的决策者正确路由到分支2。一切正常,除了在导航栏中,我无法摆脱分支2上第一个VC中的后退按钮,它包含分支1中最后一个VC的标题。

这是导航图(有点):

NavController
DecisionMaker
   branch1VC1
      branch1VC2
         branch1VC3
   branch2VC1
      branch2VC2

如果我们在branch1VC3并且我删除了最后一项然后调用popToRootViewControllerAnimated,它将通过DecisionMaker并正确地降落在branch2VC1,但它有一个带有标签“branch1VC3”的后退按钮。按下按钮时按钮不起作用。我还注意到,当我点击一个不同的按钮 - 它带你到一个“关于页面” - 在底部导航栏中,我会看到在关于页面顶部的正常后退按钮不存在所以我没办法返回。导航基本上就是这一点。

我试过了:

  • 在目标VC(branch2VC1)中调用self.navigationItem.hidesBackButton = YES但它不起作用。
  • 调用self.navigationItem.backBarButtonItem = NULL。
  • 调用self.navigationItem.leftBarButtonItem = NULL(在viewDidLoad和viewWillAppear中都尝试了所有这些)
  • 在DecisionMaker VC中将self.title设置为null。这只是将后退按钮内的文本转换为“后退”的效果,但一旦完成导航到VC,它仍然存在。
  • 调试看看我认为在VC上的VC肯定是,即在DecisionMaker VC里面只有1(本身)而在branch2VC1里面有2个。

基本上,对我而言,似乎错误的事情可能是根据与新推送到另一个分支相同的UI周期中的root操作。但我不明白为什么那应该是不可行的。我发现this SE question我认为可能是相同的,但实际上没有任何答案。

修改 决定是在做任何我的自定义逻辑和放大之前在DecisionMaker VC上调用super.viewWillAppear。导航

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self decideViewController];
}

1 个答案:

答案 0 :(得分:0)

如果在viewWillAppear中推送视图层次结构,或者在新UI正确加载之前的某个地方,那么它们总会出现问题。确保在正确的时间推送新视图。