2013-01-02 36 views
0

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

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

这是导航图示(排序):

NavController 
DecisionMaker 
    branch1VC1 
     branch1VC2 
     branch1VC3 
    branch2VC1 
     branch2VC2 

如果我们在branch1VC3并删除最后一个项目,然后调用popToRootViewControll erAnimated,它通过DecisionMaker并正确登陆branch2VC1,但它有一个带有“branch1VC3”标签的后退按钮。按下按钮时不会执行任何操作。我还注意到,当我点击一个不同的按钮 - 这将带你到一个“关于页面” - 在底部导航栏中,我会看到关于页面顶部的正常后退按钮不在那里,所以我没有办法返回。基本上,导航已经被这一点搞砸了。

我曾尝试:

  • 调用self.navigationItem.hidesBackButton = YES在目的地VC(branch2VC1),但它不工作。
  • 调用self.navigationItem.backBarButtonItem = NULL相同。
  • 调用self.navigationItem.leftBarButtonItem = NULL相同(所有这些尝试在viewDidLoad和viewWillAppear)
  • 在DecisionMaker VC中将self.title设置为null。这只是将后退按钮中的文本转换为“返回”,但它在导航到VC后仍然存在。
  • 调试,看看我认为是在栈上的风投肯定是,也就是的DecisionMaker VC里面唯一有1(本身)和branch2VC1内有2

基本上,我好像错误的事情可能是在同一个用户界面循环中作为根动作的弹出窗口,而不是新到其他分支的动作。但我不明白为什么这不应该是可行的。我发现this SE question,我认为它可能是相同的,但并没有真正的答案。

编辑: 该决议是做任何我的自定义逻辑&导航前致电super.viewWillAppear上的DecisionMaker VC。

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

DecisionMaker是UIViewController的子类吗? – Martol1ni

+0

@ Martol1ni是的。 – bobsmells

+0

@Dhara我已经问了包括这个问题在内的5个问题,并且是唯一一个被我自己以外的人解答(正确地说,它解决了我的问题)的人,我接受了答案。 – bobsmells

回答

0

如果他们在viewWillAppear推,或介于之前的新UI已经正确装载有将almomst总是与视图层次问题。确保在正确的时间推送新的视图。

+0

听起来像这可能与这个问题有很大关系。我没有我的代码在我面前,所以无法测试它,直到我明天回去工作,但我知道这些推动发生在viewWillAppear ......当你指出没有道理,因为正确的地方去做。谢谢。如果有效,我会接受你的答案。 – bobsmells

+0

就是这样,感谢堆Martol1ni! – bobsmells

+0

没问题,很高兴它解决了。 – Martol1ni