弹出另一个后如何/何时立即推动视图控制器?

时间:2013-12-23 21:12:51

标签: ios

我有一个主视图控制器(派生自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吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此处讨论的方法:popping and pushing view controllers in same action

换句话说,不是使用将调用popViewControllerAnimated:YES的固定展开segue,而是通过调用popViewControllerAnimated:NO来弹出,现在您可以直接进入推送segue。

更简洁的方法是使用新的视图控制器堆栈调用setViewControllers:animated: