self.navigationController popToRootViewControllerAnimated:YES不弹回root

时间:2013-10-14 16:54:45

标签: objective-c ios5

当点击顶部栏上的“后退”按钮时,我有这行代码回弹到根菜单:

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

到目前为止,我对此没有任何问题,我仍然使用IOS 5.1作为目标。

当我现在运行此代码(XCODE 5)时,我收到以下消息:

Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

...它似乎只是将顶部栏中的文字弹回到根(菜单),而显示屏只弹回一个级别。由于这一直有效,我有点困惑,想要一些建议如何解决这个问题。 View Controller是我执行此代码的一个普通的ViewController。

我使用[self performSegueWithIdentifier:@"xxxxx" sender:self];推送ViewControllers。

仅用于测试我使用此代码:

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

...它确实弹出VC然后直接弹回到rootVC而没有消息???

这是结构,它是从绿色VC我有问题回到第一个VC。同样,我在xcode5之前没有遇到过这个问题:

enter image description here

2 个答案:

答案 0 :(得分:3)

好的,我刚刚注意到当用户推回时你正试图弹出root用户,但现在正在发生的事情:

操作系统正试图通过动画推送到上一个viewController,同时,您正在启动第二次转换并要求它弹出到根视图控制器。

最简单的方法是使用自定义按钮替换系统的后退按钮,该按钮将使用您自己的IBAction,然后您将弹出到rootViewController:

首先隐藏后退按钮:

self.navigationItem.hidesBackButton = YES;

然后创建自己的自定义后退按钮:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"back" style:UIBarButtonItemStyleDone target:self action:@selector(popToRoot:)];
self.navigationItem.leftBarButtonItem=backBtn;

最后你弹出RootViewController:

- (IBAction)popToRoot:(UIBarButtonItem*)sender {
   [self.navigationController popToRootViewControllerAnimated:YES];
}

请务必从[self.navigationController popToRootViewControllerAnimated:YES];代表中删除ViewWillDisappear

答案 1 :(得分:0)

尝试此代码它会帮助你..

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];