2013-02-28 127 views
13

我在接口構建器上有一個UIView。在我的視圖控制器中,我有一個IBOutlet MyUIView指向接口構建器上的UIView繼承UIView。 init方法永遠不會被調用

我改變了UIView的類「MyUIView」(自定義UIView類),但它似乎沒有任何的子類的init方法被解僱。

我在做什麼錯?

+1

你可以展示你的代碼嗎? – nsgulliver 2013-02-28 16:31:13

+0

代碼中沒有任何東西!在界面生成器中,我選擇UIView並將類設置爲「ShadowView」。我在ShadowView init方法中放置了斷點,但它永遠不會進入這些方法。 – 2013-02-28 16:34:45

回答

25

相反的init需要調用initWithCoder第一然後調用init爲:

- (id)initWithCoder:(NSCoder *)aDecoder { 
    if ((self = [super initWithCoder:aDecoder])) { 
     [self baseClassInit]; 
    } 
    return self; 
} 

- (void)baseClassInit { 

    //initialize all ivars and properties  
} 
+0

謝謝我會檢查出來! – 2013-02-28 16:41:06

+0

您還需要*實現*'initWithCoder:',如代碼那樣。簡單地從一些隨機的地方調用它,而單獨重寫'init'不會完成這項工作。 – 2013-03-02 02:53:27

20

簡短的回答:您需要使用initWithCoder:

initWithFrame:文檔:

如果您使用Interface Builder來設計自己的界面,當你的視圖對象隨後從筆尖文件加載不調用此方法。 nib文件中的對象被重構,然後使用其initWithCoder:方法進行初始化,該方法修改視圖的屬性以匹配存儲在nib文件中的屬性。

如果您使用的是nib/xib/Storyboard文件,請使用initWithCoder:。如果您以編程方式創建視圖,則可以使用initinitWithFrame:

相關問題