【问题标题】:Custom loadView and container views自定义 loadView 和容器视图
【发布时间】:2016-08-31 19:07:54
【问题描述】:

我的应用程序中的所有控制器都继承自 UIViewController 的抽象基类。我还有一个UIView (View) 的子类,它增加了一些额外的所需属性,其中包括反应性可可。现在在我的自定义视图控制器类中,我想覆盖 loadView 并执行以下操作:

override func loadView() {
    let customView = View(frame: UIScreen.mainScreen().bounds)
    self.view = customView
}

然后我有一个属性rac_view:

var rac_view: View {
    return self.view as? View ?? View()
}

这样我的视图控制器类的所有子类都可以立即访问View 属性,而无需自己执行额外的转换。

在我覆盖 loadView 之前,一切都很好。一旦我这样做,我就会在应用程序启动时崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'containerView is required.'

在我的故事板中,我的初始视图控制器有几个容器视图,其中嵌入了从我的抽象基类继承的其他视图控制器的转场。出于某种原因,当涉及到容器视图时,覆盖 loadView 并设置我自己的自定义视图会给工作带来麻烦,我不知道为什么。

有没有人见过或经历过这样的事情?

【问题讨论】:

  • 这可能是因为您将 self.view 分配给两个不同的东西,一个是自定义视图,另一个是 rac_view。您是否也尝试过除了 loadView 之外的其他初始化程序?

标签: ios swift uiviewcontroller uistoryboard uistoryboardsegue


【解决方案1】:

我发现原因是尽管在 loadView 中设置了自定义视图,但在我的故事板中,我的视图控制器的视图类型为 UIView,而不是 View。事实上,我根本不需要重写loadView,只需将故事板中的视图属性设置为我的自定义类即可。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 2011-05-15
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多