问题的背景:
我试图通过在故事板的最顶层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?)")
是“无”。怎么没有初始化?
答案 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
。