我有一个主视图控制器(派生自UINavigationController),它可以查看控制器A. 当用户退出A时,展开seque返回主控制器,然后主控制器查看控制器B.
我面临的问题是,如果我在主视图控制器中有以下代码:
- (IBAction)unwindToMasterViewController:(UIStoryboardSegue *)segue
{
[self performSegueWithIdentifier:@"SequeToViewControllerB" sender:self];
}
然后我得到错误:“嵌套推送动画可能导致导航栏损坏对视图控制器B的开始/结束外观转换的不平衡调用”。
但是,如果我从展开的seque中删除对performSeque的调用,并从主视图控制器上的按钮手动触发它,那么一切正常。因此,这表明问题与时间有关,事实上我在过去看到过与此类似的问题,这些问题与动画计时有关(尝试调用pushViewControllerAnimated:在上一次调用push之前完全完成等等。)。 / p>
因此请记住,我尝试将seque放在下面的代码中,期望在视图控制器A完成弹出堆栈之前不会调用didPopItem。
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
[self performSegueWithIdentifier:@"HomeSeque" sender:self];
}
然而,这并没有解决它。
那么我怎么知道视图控制器A何时从堆栈中弹出,所以我知道查看控制器B的安全性是否安全? (假设这确实是问题,但似乎是由于我的按钮实验)。
或者有一种方法可以让操作系统从VC A转换到VC B吗?
答案 0 :(得分:1)
您可以使用此处讨论的方法:popping and pushing view controllers in same action
换句话说,不是使用将调用popViewControllerAnimated:YES
的固定展开segue,而是通过调用popViewControllerAnimated:NO
来弹出,现在您可以直接进入推送segue。
更简洁的方法是使用新的视图控制器堆栈调用setViewControllers:animated:
。