我的应用程序中有一种情况,我需要通过 unwind segue 关闭模态视图 Controller ,然后立即显示不同的模态视图 Controller 。为此,我只是将显示新 View Controller 的调用延迟 1.0 秒。这可能不会一直有效,也许如果由于某种原因需要更长时间才能关闭,第二个 View Controller 将无法出现,因为正在发生转换。我刚遇到这种情况,尽管它在这种情况下确实有效。这是记录的:
警告:在演示过程中尝试继续演示!
我正在寻找更好的解决方案。我想知道是否可以在第一个 View Controller 完全关闭后通过回调抛出新的 View Controller ,但是没有 performSegueWithIdentifier
具有完成 block 。
我如何关闭模态视图 Controller ,然后再呈现一个新的,始终确保不会发生冲突?
这是我目前的解决方案:
[self performSegueWithIdentifier:@"Unwind Segue" sender:self]; //dismiss modal or pushed VC
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[tabBarController performSegueWithIdentifier:@"Show New VC" sender:self]; //present new modal VC
});
最佳答案
我自己花了一段时间才弄明白这个问题。 iOS 7 引入了 transitionCoordinator
,它仅在动画期间出现在 UIViewController 上。简而言之,您必须在主队列的另一个线程中注册您的完成 block (该线程将在动画开始后运行)。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// ... prepare your for segue
dispatch_async(dispatch_get_main_queue(), ^{
[self.transitionCoordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
// Segue animation complete
}];
});
}
关于ios - 当前演示完成后如何执行segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814025/