何时访问UIViewController生命周期中的子视图属性?

时间:2014-07-25 18:41:56

标签: uiviewcontroller swift lifecycle

问题的背景:

我试图通过在故事板的最顶层viewcontroller中放置三个UIView来学习如何在Xcode 6中使用故事板。其中一个UIView是蓝色,一个是红色,一个是黄色。我试图看看我是否可以通过改变其中一个UIViews的背景颜色来以编程方式改变UIView。通过Command +单击UIViewController类并查看要覆盖的相应函数,我确定“viewDidAppear”是UIViewController在其设置代码中调用的最终函数。

问题:

这是我对函数的重写:

override func viewDidAppear(animated: Bool) {
    self.bottomView!.backgroundColor = UIColor.blackColor()
    super.viewDidAppear(animated)
}

但是,当我运行此代码时,带有三个UIViews的屏幕会暂时显示,没有黑色的UIView,然后继续崩溃

"fatal error: unexpectedly found nil while unwrapping an Optional value"

问题:

为了能够以编程方式更改UIView的属性,我必须覆盖哪些函数?这样做的最佳实践方法是什么?

编辑:

我正在使用Storyboard所以我的三个UIView是在我的UIViewController类的开头声明的:

@IBOutlet var topLeftView: UIView?
@IBOutlet var topRightView: UIView?
@IBOutlet var bottomView: UIView?

当调用viewDidLoad时,似乎没有任何视图实际初始化,因为以下代码行的结果

println("\(bottomView?)")

是“无”。怎么没有初始化?

1 个答案:

答案 0 :(得分:0)

最好在viewDidLoad中完成。将视图添加到视图层次结构中时会调用viewDidAppear,但尚未启动它。视图分配到内存时调用viewDidLoad。根据{{​​1}}的文档:

viewDidLoad

您应该覆盖You usually override this method to perform additional initialization on views that were loaded from nib files并在其中修改viewDidLoad