2011-03-25 59 views
1

如果我以編程的方式創建一個UIView,並且我希望改變UIView屬性(例如,或者實際上與CALayers混淆),我必須將代碼UIView之外,如在視圖控制器?我可以把代碼放在UIView裏面嗎?哪裏可以放置代碼來改變UIView的屬性

我正在檢查CoreAnimationKioskStyleMenu示例,它的代碼位於UIView內部,但它是從Nib加載的,可以放在awakeFromNib中,所以它似乎不適用於我的情況。

回答

1

這取決於。顯然,處理這個問題的好方法是使用一個xib文件,因爲它被設計用來保存這樣的數據,但這並不總是每種情況的最佳答案。

如果該視圖旨在在整個應用程序中經常重複使用(如按鈕或某個小部件),則最好將所有該自定義存儲在UIView的子類中。

如果它的單個大視圖總是由UIViewController管理,那麼可以在UIViewController中保留一些信息。但是,如果你最終繼承了UIView子類,那麼最好的做法是將數據保存在UIView中。

作爲一般性說明,我相信它值得您花時間將這些數據儘可能多地用到使用接口構建器的xib中。如果你想修改它,魔法值(如顏色或大小)貫穿你的代碼將永遠是一個問題。我發現修改xib要容易得多。

+0

重讀你的評論,如果你有CALayer級別的代碼,那麼你一定要把它放在UIView的子類中。 – 2011-03-25 14:29:38

1

實際上有一些方法可以放置初始化/自定義代碼。

  • (void)willMoveToSuperview:(UIView *)newSuperview;
  • (void)didMoveToSuperview;

只要您將視圖作爲子視圖添加到另一個視圖中,此時您已經擁有該框架和所有屬性,並且您可以根據需要進行進一步自定義。

  • (void)layoutSubviews - 通常用於更改子視圖的框架和佈局組織。 每次需要由系統重繪視圖時,或者當您在UIView上專門調用[self setNeedsLayout]時,都會調用它。

希望這會有所幫助。