在我的一个viewcontroller中,让我们说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中我已经推送到navigationController:
[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>.
任何想法?
答案 0 :(得分:2)
相当复杂的调用序列,但我看到的第一个问题是它看起来像是在OnbViewController上调用pushViewController,而不是在其navigationController上调用。也许更改为[self.test.navigationController pushViewController:someOtherViewController];
就足够了?
编辑:在进一步观察时,我注意到“嵌套推动画”中的“动画”。是onbViewController在viewWillAppear期间推送到someViewController还是在那之前的某个地方?也许跳过第二个动画会有用吗?
答案 1 :(得分:0)
这是一个真正纠缠在那里的指针。 self.test是导航控制器(nController)的根vc。您以模态方式呈现nController,然后将其他视图控制器推送到它的vc堆栈。
然后,当那个堆栈仍然存在时,你会进入self.test,就像再次推入root。
让获取didSelectRow消息的VC执行推送。你仍然可以告诉代表它发生了。