2012-04-21 46 views
1

對於單個視圖應用程序,添加了一個DrawView類,它是UIView類的一個子類。在iPad上,不會調用基於UIView的新類的initWithFrame?

它是用來作爲該應用的主視圖中,所以這個類的drawRect方法效果很好,可以繪製的東西,例如,但通過Xcode中生成的代碼具有線「//初始​​化代碼」,以指示將init代碼就在那裏,在initWithFrame裏面,但是我在那裏放了一些代碼,它沒有被調用,並且在那裏設置了一個斷點,但是它永遠不會停止在那裏?然後我使用通常的方法添加了一個init,它不被調用?

+1

正在從筆尖加載的看法? – tronbabylove 2012-04-21 20:15:12

+0

它被設置爲用於默認ViewController.xib的視圖...是否與從一個筆尖加載相同? – 2012-04-21 20:16:35

回答

3

嘗試覆蓋 - (id)initWithCoder:(NSCoder *)編碼器。我相信當從nib加載視圖時,它會使用這個init方法。請參閱this問題。

+0

如果'initWithCoder'沒有添加初始化代碼,那麼'initWithFrame'斷點將被觸發(並且任何初始化代碼都將在那裏運行)...並且Interface Builder上設置的背景顏色也不會被使用。它全是黑色的。是否可以使用Interface Builder中的顏色設置? – 2012-04-21 20:24:39

+0

你確定需要重寫init,還是可以使用awakeFromNib? (允許您在加載筆尖後執行自定義初始化。) – tronbabylove 2012-04-21 20:37:53

+2

這是正確的答案。如果您可能會使用NIB中的類並從代碼實例化,只需創建某種-commonConfiguration方法(或類似的名稱)並從兩個地方調用它。那麼你的init代碼就在一個地方。 – atticus 2012-04-21 20:39:42

1
  • 的initWithCoder: - 建議你,如果你從Interface Builder的nib文件加載你的看法和你的看法需要自定義initialization.The筆尖加載代碼不使用initWithFrame實現此方法:方法實例化新的視圖對象。相反,它使用NSCoding協議中的initWithCoder:方法。 nib加載代碼不使用initWithFrame:方法來實例化新的視圖對象。相反,它使用NSCoding協議中的initWithCoder:方法。apple's doc

  • initWithFrame:方法 - 對視圖的缺省初始化方法,該新的視圖對象必須被插入到一個窗口的視圖層次可以使用之前。如果以編程方式創建視圖對象,則此方法是UIView類的指定初始值設定項。

這裏一些更多的信息:overriding methods

樂於幫助:)

相關問題