何时访问UIViewController生命周期中的子视图属性?
问题的背景:
我正试图通过将三个UIViews放置在故事板的最顶层视图控制器中来学习如何在Xcode 6中使用故事板。 其中一个UIView是蓝色的,一个是红色的,另一个是黄色的。 我正在尝试查看是否可以通过更改其中一个UIViews的背景色来以编程方式更改UIView。 通过命令+单击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?)")
是“零”。 这怎么没有被初始化?
这最好在viewDidLoad
完成。 viewDidAppear
在视图添加到视图层次结构中时被调用,但尚未启动。 viewDidLoad
在视图分配到内存时调用。 根据viewDidLoad
的文档:
You usually override this method to perform additional initialization on views that were loaded from nib files
您应该重写viewDidLoad
并在其中修改您的UIView
。
上一篇: When to access subview properties in UIViewController Lifecycle?