2013-01-12 74 views
0

我有一個自定義視圖控制器與幾個子視圖。每個子視圖都通過IBOutlet屬性連接到視圖控制器的.m文件。這些子視圖有自定義設置器,根據子視圖是否顯示內容來調整其他子視圖的大小。爲什麼self.view調用子視圖setter方法?

現在看起來這些自定義設置程序在調用viewDidLoad之前被initWithCoder:調用。 (我希望/假定這是正常的。)

我的問題是,調用self.view訪問的self.view的子視圖的setter方法。我目前的理解是,這不應該是必要的。有人可以解釋這裏發生了什麼嗎?我寧願這不會發生,因爲我不想通過訪問self.view來設置任何內容。

下面是代碼:https://github.com/kenmhaggerty/Sandbox

+1

什麼自定義setter?你重寫了UIView的屬性setter/getter這樣ash'setFrame:'? –

+0

我創建形式的三個屬性'@屬性(非原子,強)IBOutlet中的UIView * viewOne'我的視圖控制器內,並且每個視圖具有形式'一個相應的自定義設定器 - (無效)setViewOne'其中我調整的大小其他視圖取決於我是否將'viewOne'設置爲零或從零開始。 –

+0

也許你可以提供您不希望通過訪問'view'財產(哇,這是奇怪的)被稱爲代碼的樣本 – CodaFi

回答

0

視圖控制器上調用self.view使其從筆尖加載其觀點,如果它沒有這樣做。這實例化了筆尖中的所有對象(使用initWithCoder :)並設置任何插座的值(使用您的訪問器方法)。然後它調用viewDidLoad,通過這個點,nib中的所有內容都將存在。

您的出口設置方法也有可能不是一個合適的位置是做佈局調整。可以使用基於約束的佈局來自動適應子視圖大小的變化,也可以使用viewDidLayoutSubviews,或者使用您使用的方法將模型信息傳遞給子視圖。

相關問題