【问题标题】:presentModalViewController does not work if called too early如果过早调用 presentModalViewController 将不起作用
【发布时间】:2010-10-14 02:51:24
【问题描述】:

如果我关闭模态 VC 并在不到一定时间内再次呈现它(或另一个),它不会出现。 我错过了什么吗?

【问题讨论】:

    标签: iphone objective-c modalviewcontroller presentmodalviewcontroller


    【解决方案1】:

    是的,你不能这样做。我假设你所做的是这样的:

     [self dismissModalViewControllerAnimated:YES];
     [self presentModalViewController:myNewController animated:YES];
    

    这不起作用。我不知道确切原因,但它与我相信的动画有关。您的选择是在没有动画的情况下关闭第一个,或者等待在父级的 viewDidAppear 中显示新的(或者可能是前一个模式视图的 viewDidDisappear,但不确定这是否有效)。

    【讨论】:

    • 这不起作用的原因是视图控制器在动画完成时取消了它对模态vc的引用。因此它认为它不再有另一个视图控制器来模态呈现。您建议的两种解决方案都可以使用。
    • 此处发布的答案对这两种方法有更多详细信息。 stackoverflow.com/questions/3919845/…
    【解决方案2】:

    你不能一个接一个地关闭两个模态视图控制器,除了另一个海报的建议之外,你可以等待一小段时间,然后再关闭另一个模态视图,例如

    [self performSelector:@selector(method) withObject:nil afterDelay:.5];
    

    调用的方法只是关闭您的其他模态视图。 代码的 sn-p 会在 0.5 秒后执行选择器,并且可以在遇到您描述的动画计时问题时使用,以分隔调用时间以便它们正确执行。

    【讨论】:

    • 这有点危险(不多),因为如果关闭动画的时间比您的延迟时间长,您的模态 vc 仍然不会出现。 (而且时间可能会随着操作系统的更新而改变。)Alex 的方法不受这个问题的影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2012-07-08
    • 2011-03-22
    • 2012-10-31
    • 2015-12-04
    相关资源
    最近更新 更多