【问题标题】:Is there a way to know if a UIViewController has been presented and dismissed modally ?有没有办法知道 UIViewController 是否已以模态方式呈现和解除?
【发布时间】:2011-11-10 09:57:57
【问题描述】:

有没有办法知道 UIViewController 是否已以模态方式呈现和关闭?

类似:

  • hasBeenPresentedModally
  • hasBeenDismissedModally

谢谢

【问题讨论】:

    标签: ios


    【解决方案1】:

    没有内置任何内容,但视图控制器可以在收到viewDidAppear 和/或viewWillDisappear 后检查它是否有parentViewController,因为根据Apple's documentation(添加了重点):

    父视图控制器与导航、标签栏和模式相关 查看控制器层次结构。在每个层次结构中,父级 是负责显示当前视图控制器的对象。 如果您将视图控制器用作独立对象——也就是说,不是 作为视图控制器层次结构的一部分——这个属性的值是 无。

    如果有,那么它可以设置合适的标志以供将来参考。

    请注意,模态呈现不同于真正的模态。例如,在 iPad 上,您可能会将一个控制器放在 UIPopoverController 中,这样该控制器就不会以模态方式呈现,但随后它可能会以模态方式在其自身之上呈现另一个控制器。所以第二个控制器以模态方式呈现,但它本身并不是模态对话,因为——如果程序设置得当——用户可以完全忽略弹出框。

    【讨论】:

    • viewWillDisappear 太早了; viewDidDisappear 适用于检查父母是否被取消,例如弹出导航堆栈后。
    【解决方案2】:

    检查您的 UIViewController 的 parentViewController 属性是否为 nil。 如果该属性是 nil,则将其关闭,否则将显示。

    注意:UITableViewController 的 childViewController 的 parentViewController 属性也不会是 nil,您还应该确保 parentViewController 不是 UITableViewController。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多