0

问题是:我有modalViewController一个按钮可以触发 IBAction,如下所示:

-(IBAction)myMethod
{
    [self dismissModalViewControllerAnimated:YES];

    if([delegate respondsToSelector:@selector(presentOtherModalView)])
    {
        [delegate presentOtherModalView];
    } 
}

在作为委托的根视图中,modalViewController我已经实现了presentOtherModalView委托方法,它看起来像这样:

    -(void)presentOtherModalView
{

     AnotherViewController *viewInstance = [[AnotherViewController alloc]initWithNibName:@"AnotherViewController" bundle:nil];

     viewInstance.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

     [self presentModalViewController:viewInstance animated:YES];

    [viewInstance release];
}

问题是第二个modalViewController没有被呈现。它给了我信息wait_fences: failed to receive reply: 10004003......应该怎么做?

4

2 回答 2

1

因为它们是在彼此之后执行的(它们不会等待视图消失/出现),所以它不会被执行。因为屏幕上一次只能有一个 ModalViewController,所以您必须先等待另一个 ModalViewController 消失,然后才能将下一个 ModalViewController 放到屏幕上。

你可以按照自己的方式创造性地做到这一点,但我这样做的方式是这样的:

[self dismissModalViewControllerAnimated:YES];
self.isModalViewControllerNeeded = YES;

然后在底层的 ViewController 中,在 viewDidAppear 方法中,我这样做:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.isModalViewControllerNeeded) {
        [self presentModalViewController:viewInstance animated:YES];
        self.isModalViewControllerNeeded = NO;
    }
}

希望能帮助到你!

于 2012-08-17T12:53:39.230 回答
1

这是因为dismissModalViewControllerAnimated动画关闭需要一些时间,并且您在关闭第一个模态视图之前调用另一个视图作为模态视图呈现,因此呈现模态视图调用被拒绝。当您完全关闭后不在视图上时,您不应该执行动画,只有您可以调用另一个视图。要解决此问题,请使用时间间隔在 2 或 3 秒后调用当前模式视图,或使用完成块dismissModalViewControllerAnimated

您可以通过使用它来实现它

[delegate performSelector:@selector(presentOtherModalView) withObject:nil afterDelay:3];
于 2012-08-17T12:47:46.587 回答