连续调用UIViewController的presentViewController方法

时间:2012-05-17 02:18:19

标签: ios asynchronous presentmodalviewcontroller

我最近在我的iOS应用程序中遇到了一个令人毛骨悚然的情况,我试图从我的窗口的rootViewController中依次解除一个呈现UIViewController的情况,使用:

[rootViewController dismissViewControllerAnimated:YES completion:NULL]

并在此后不久(另一种方法,顺便提出)提出另一个:

UIViewController *vc2 = [[[MyViewController2 alloc] initWithNibName:nil bundle:nil] autorelease];
[rootViewController presentViewController:vc2 animated:YES completion:NULL];

问题是,我永远无法显示第二个视图控制器。事实证明,就像我所知,dismissViewControllerAnimated:completion:需要在presentViewController:animated:completion:再次正常工作之前通过“完成”时间的异步块。根据我所知,Apple's docs中没有直接记录这一事实。

我提出的解决方案是使用一个方法来解雇解雇,这个方法指定了之后要调用的选择器,如下所示:

- (void)dismissViewController:(UIViewController *)presentingController
                   postAction:(SEL)postDismissalAction
{
    [presentingController dismissViewControllerAnimated:YES
                                             completion:^{
                                                            [self performSelectorOnMainThread:postDismissalAction
                                                                                   withObject:nil
                                                                                waitUntilDone:NO];
                                                         }];
}

然后我会打电话:

[self dismissViewController:self.window.rootViewController
                 postAction:@selector(methodForNextModalPresentation)];

无论如何,我想发帖,因为我环顾四周,并没有看到任何人遇到这个特殊问题,所以我认为这对人们理解可能是有用的。而且,我想验证我没有破解具有更好解决方案设计模式的解决方案。

1 个答案:

答案 0 :(得分:2)

为了清楚起见。你是说这段代码不起作用吗?

[myRootViewController dismissViewControllerAnimated:YES completion:^{
    [myRootViewController pushViewController:newController animated:YES];
}];