【问题标题】:loadViewIfNeeded before iOS 9iOS 9 之前的 loadViewIfNeeded
【发布时间】:2016-02-06 09:58:02
【问题描述】:

我需要创建并加载一个UIViewController,然后将其作为子视图插入另一个UIViewController

在 iOS 9 中,我可以使用 myController.loadViewIfNeeded()。 iOS 8 有什么好的解决方法?

myController.view.hidden = myController.view.hidden 似乎有效,但它似乎是一个危险的黑客攻击。

【问题讨论】:

  • 这个小“黑客”起作用的原因是视图控制器在第一次访问时加载他们的视图(所以即使是print(vc.view) 也会加载视图)但是有适当的如果您正在实施custom container view controller,则用于管理子控制器的机制

标签: ios swift uiviewcontroller


【解决方案1】:

您可以通过多种方式强制视图控制器加载其视图。事实上,最常见的方式(据我所知)是访问视图控制器的view 属性。

_ = viewController.view

我不会将其视为 hack。事实上,Apple 的文档指出当 view 属性等于 nil 时访问它会导致加载请求的视图。这意味着建议的解决方案是安全的,即使在 iOS 的未来版本中也应该能按预期工作。来自Apple's documentation

存储在此属性中的视图表示视图控制器的视图层次结构的根视图。该属性的默认值为 nil。

如果你访问这个属性并且它的值当前是 nil,视图控制器会自动调用 loadView 方法并返回结果视图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多