如何在当前演示完成后执行segue

Jor*_*n H 1 objective-c ios segue uistoryboardsegue

我有一个情况在我的应用程序,我需要通过展开segue解雇一个模态视图控制器,然后就在那之后呈现一个不同的模态视图控制器.为此,我只是将调用延迟显示新视图控制器1.0秒.这可能不会一直有效,可能由于某种原因需要更长时间才能解除,第二个视图控制器将无法显示,因为正在发生转换.我刚遇到这种情况,虽然在这种情况下确实有效.记录了这个:

警告:在演示文稿正在进行时尝试演示!

我正在寻找更好的解决方案.我想知道是否有可能在第一个完全被解雇之后通过回调抛出新的视图控制器,但是没有performSegueWithIdentifier一个有完成块.

我如何解除模态视图控制器然后呈现新的控制器,始终确保不会发生冲突?

这是我目前的解决方案:

[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
});
Run Code Online (Sandbox Code Playgroud)

小智 11

我花了一段时间才弄明白这个.iOS 7引入了transitionCoordinator在动画期间仅出现在UIViewController上的内容.简而言之,您必须在主队列的另一个线程中注册完成块(在动画开始后将运行).

- (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
         }];
    });
}
Run Code Online (Sandbox Code Playgroud)