0

在我的一个视图控制器中,假设 A,我有以下内容:

 OnbViewController *on = [[OnbViewController alloc] initWithNibName:nibName bundle:nil];
        onboardingTutorial.delegate_ = self;
self.test = on
 UINavigationController *nController = [[UINavigationController alloc] initWithRootViewController:self.test]
[self presentModalViewController:nController]
[nController release];

然后在 OnbViewController 里面我推到了导航控制器:

[self.navigationController pushViewController:someViewController];

然后在 didSelectRowForIndexPath: 我调用了一个委托,它是 A,在我调用的委托函数中,我尝试通过执行以下操作再次推送:

[self.test pushViewController:someOtherViewController];

然后这给了我这个错误:

nested push animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
   Unbalanced calls to begin/end appearance transitions for <someOtherViewController: 0x6f942e0>.

任何的想法?

4

2 回答 2

2

相当复杂的调用顺序,但我看到的第一个问题是,您似乎是在 OnbViewController 上调用 pushViewController,而不是在其 navigationController 上。也许改变[self.test.navigationController pushViewController:someOtherViewController];就足够了?

编辑:在进一步研究这一点时,我注意到“嵌套推送动画”中的“动画”。onbViewController 是在 viewWillAppear 期间或类似的早期推送到 someViewController 吗?也许跳过第二个动画会起作用?

于 2012-04-11T23:30:45.997 回答
0

这是在那里创建的指针的真正纠结。self.test 是导航控制器 (nController) 的根 vc。您以模态方式呈现 nController,然后将其他视图控制器推送到它的 vc 堆栈上。

然后,当那个堆栈仍然存在时,你推入 self.test,这就像再次推入根。

让获取 didSelectRow 消息的 VC 进行推送。您仍然可以告诉代表它发生了。

于 2012-04-11T23:32:15.340 回答