【发布时间】:2011-11-10 09:57:57
【问题描述】:
有没有办法知道 UIViewController 是否已以模态方式呈现和关闭?
类似:
- hasBeenPresentedModally
- hasBeenDismissedModally
谢谢
【问题讨论】:
标签: ios
有没有办法知道 UIViewController 是否已以模态方式呈现和关闭?
类似:
谢谢
【问题讨论】:
标签: ios
没有内置任何内容,但视图控制器可以在收到viewDidAppear 和/或viewWillDisappear 后检查它是否有parentViewController,因为根据Apple's documentation(添加了重点):
父视图控制器与导航、标签栏和模式相关 查看控制器层次结构。在每个层次结构中,父级 是负责显示当前视图控制器的对象。 如果您将视图控制器用作独立对象——也就是说,不是 作为视图控制器层次结构的一部分——这个属性的值是 无。
如果有,那么它可以设置合适的标志以供将来参考。
请注意,模态呈现不同于真正的模态。例如,在 iPad 上,您可能会将一个控制器放在 UIPopoverController 中,这样该控制器就不会以模态方式呈现,但随后它可能会以模态方式在其自身之上呈现另一个控制器。所以第二个控制器以模态方式呈现,但它本身并不是模态对话,因为——如果程序设置得当——用户可以完全忽略弹出框。
【讨论】:
viewWillDisappear 太早了; viewDidDisappear 适用于检查父母是否被取消,例如弹出导航堆栈后。
检查您的 UIViewController 的 parentViewController 属性是否为 nil。
如果该属性是 nil,则将其关闭,否则将显示。
注意:UITableViewController 的 childViewController 的 parentViewController 属性也不会是 nil,您还应该确保 parentViewController 不是 UITableViewController。
【讨论】: