自定义loadView和容器视图

时间:2016-05-05 20:50:06

标签: ios swift uiviewcontroller uistoryboard uistoryboardsegue

我有UIViewController的抽象基类,我的应用程序中的所有控制器都继承自。我还有一个UIViewView)的子类,它添加了一些额外的所需属性,其中包含了反应可可的特性。现在在我的自定义视图控制器类中,我想覆盖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.'

在我的故事板中,我的初始视图控制器有几个容器视图,其中嵌入了从我的抽象基类继承的其他视图控制器的segue。出于某种原因,覆盖loadView并设置我自己的自定义视图会在容器视图方面产生影响,我不确定原因。

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

1 个答案:

答案 0 :(得分:1)

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