2014-07-25 46 views
0

问题的背景:何时访问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的属性,我必须重写什么函数?这样做的最佳做法是什么?

编辑:

我使用故事板使我的三个的UIView的在我的UIViewController类的开始,因为这样宣称:

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

看来,当viewDidLoad中得不到任何的意见,实际上是初始化因为下面这行代码的结果是

println("\(bottomView?)") 

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

回答

0

这最好在viewDidLoad完成。当视图添加到视图层次结构中时调用viewDidAppear,但它尚未启动。当视图分配到内存时调用viewDidLoad。根据该文档为viewDidLoad

You usually override this method to perform additional initialization on views that were loaded from nib files

您应该重写viewDidLoad,并在那里修改UIView的。

+0

我编辑了我的初始帖子以回应您的建议。 – almel