2014-07-25 47 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