它似乎在任何一种情况下都有效,但为什么以及如何,以及哪种方法是最好的?
问问题
408 次
1 回答
6
为什么以及如何
假设视图控制器 A 呈现了 B,B 依次呈现了 C。
当您调用 时dismissViewControllerAnimated:completion:
,iOS 会检查您调用它的视图控制器是否在其presentedViewController
属性中包含子对象。如果是这样,那么它会解除该控制器。
因此,如果我在我们的示例中在 B 上调用它,它会忽略 C,但如果我在 A 上调用它,它会忽略 B(这会带走 C)。
如果我在 C 上调用它,那么它没有孩子。因此,iOS 会检查该presentingViewController
属性。如果已设置,它会要求它关闭其控制器。因此,如果我在 C 上调用它,iOS 会将请求发送回 B,B 会拒绝 C。
因此,在 B 或 C 上调用该方法将摆脱 C,而在 A 上调用该方法将摆脱 B 和 C。
最佳实践
每次都在 B 上调用它,在呈现的东西上调用它。这是
不那么令人困惑,因为您的出席和解雇将在同一个地方,并且
更多的未来证明,因为在未来的某个时候,您可能会让 C 呈现另一个视图控制器(D),然后解雇会突然中断(它会突然开始解雇 D,而不是解雇自己)。
于 2013-08-04T20:47:17.530 回答