1

单击顶部栏上的“返回”按钮时,我有这行代码可以弹回根菜单:

- (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.

...而且它似乎只将顶部栏中的文本弹出回根(菜单),而显示只弹出一层。由于这一直有效,我有点困惑,想得到一些如何解决这个问题的建议。我执行此代码的视图控制器是一个普通的视图控制器。

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

只是为了测试我使用了这段代码:

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

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

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

在此处输入图像描述

4

2 回答 2

3

好的,我刚刚注意到您正在尝试弹出到根目录,当用户推回时,但这是正在发生的事情:

操作系统正在尝试使用动画推送到前一个 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代表中删除 。

于 2013-10-14T19:27:39.317 回答
0

试试这个代码,它会帮助你..

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
于 2013-10-16T09:35:39.930 回答