我在接口構建器上有一個UIView
。在我的視圖控制器中,我有一個IBOutlet MyUIView
指向接口構建器上的UIView
。繼承UIView。 init方法永遠不會被調用
我改變了UIView
的類「MyUIView
」(自定義UIView類),但它似乎沒有任何的子類的init
方法被解僱。
我在做什麼錯?
我在接口構建器上有一個UIView
。在我的視圖控制器中,我有一個IBOutlet MyUIView
指向接口構建器上的UIView
。繼承UIView。 init方法永遠不會被調用
我改變了UIView
的類「MyUIView
」(自定義UIView類),但它似乎沒有任何的子類的init
方法被解僱。
我在做什麼錯?
相反的init
需要調用initWithCoder
第一然後調用init
爲:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseClassInit];
}
return self;
}
- (void)baseClassInit {
//initialize all ivars and properties
}
謝謝我會檢查出來! – 2013-02-28 16:41:06
您還需要*實現*'initWithCoder:',如代碼那樣。簡單地從一些隨機的地方調用它,而單獨重寫'init'不會完成這項工作。 – 2013-03-02 02:53:27
簡短的回答:您需要使用initWithCoder:
。
從initWithFrame:
文檔:
如果您使用Interface Builder來設計自己的界面,當你的視圖對象隨後從筆尖文件加載不調用此方法。 nib文件中的對象被重構,然後使用其initWithCoder:方法進行初始化,該方法修改視圖的屬性以匹配存儲在nib文件中的屬性。
如果您使用的是nib/xib/Storyboard文件,請使用initWithCoder:
。如果您以編程方式創建視圖,則可以使用init
或initWithFrame:
。
你可以展示你的代碼嗎? – nsgulliver 2013-02-28 16:31:13
代碼中沒有任何東西!在界面生成器中,我選擇UIView並將類設置爲「ShadowView」。我在ShadowView init方法中放置了斷點,但它永遠不會進入這些方法。 – 2013-02-28 16:34:45