如果过早调用 presentModalViewController 将不起作用

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

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

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

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

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

【讨论】:

这有点危险(不多),因为如果关闭动画的时间比您的延迟时间长,您的模态 vc 仍然不会出现。 (而且时间可能会随着操作系统的更新而改变。)Alex 的方法不受这个问题的影响。

以上是关于如果过早调用 presentModalViewController 将不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何过早取消 RestKit 中的请求并调用“didFailWithError”

芹菜工人过早退出不会调用 on_failure

node.js async.eachSeries 过早调用最终回调

反应 redux,thunk 完成事件过早发生

过早收集资源垃圾

如果我过早将鼠标移至子菜单,Firefox 上的 CSS 动画将结束