弹出到根视图控制器时,导航栏不会更新

时间:2013-01-29 20:19:08

标签: ios cocoa-touch

我的故事板设置如下:

  1. 导航控制器---连接到--->查看A ---> table cell segue --->查看B
  2. 独立视图C,即故事板中任何其他视图都没有与其连接的segue。
  3. 点击View A中的一个单元格,自动执行segue到View B. 在视图B中,在显示视图并触发应用程序事件后,它会自动解除自身并推送View C的实例,执行以下操作:

    查看B:

    - (void)someEvent
    {
        ViewCController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewC"];
        [self.navigationController pushViewController:controller animated:YES];
    }
    

    这一切都很棒,View C弹出视图。但是,当我点击View C导航栏上的“后退”按钮时,我希望它一直弹回到View A,而不是View B.我试过这个:

    查看C:

    - (void)viewWillDisappear:(BOOL)animated
    {
         [super viewWillDisappear:animated];
         [self.navigationController popToRootViewControllerAnimated:animated];
    }
    

    这几乎与预期的一样,因为View C被取消,View A重新绕过View B.问题是,View A中的导航栏仍然认为它更深一层,因为它仍然显示“Back”按钮而不是视图A中的那些。我必须再次点击“返回”按钮才能显示正确的按钮。

    我错过了什么?

2 个答案:

答案 0 :(得分:1)

我不确定你能做到这一点,或者你应该这样做。后退按钮有一个特定的目的 - 回到上一个视图控制器,我不认为你应该试图颠覆它(它的标题将指向那个,而不是你的第一个)。最好在viewC中向导航栏添加另一个栏按钮,并将其连接到执行popToRootViewController的代码。

答案 1 :(得分:1)

在视图C中分配您自己的barButtonItem并将其放在self.navigationItem.leftBarButtonItem中以替换后退按钮并使此按钮的操作执行[self.navigationController popToRootViewControllerAnimated:YES]