我UIView在界面生成器上有一个。在我的视图控制器中,我有一个IBOutlet MyUIView指向UIView界面生成器上的。
我将类更改UIView为“ MyUIView”(自定义 UIView 类),但似乎没有init触发子类的任何方法。
我究竟做错了什么?
我UIView在界面生成器上有一个。在我的视图控制器中,我有一个IBOutlet MyUIView指向UIView界面生成器上的。
我将类更改UIView为“ MyUIView”(自定义 UIView 类),但似乎没有init触发子类的任何方法。
我究竟做错了什么?
Instead of init you need to call initWithCoder first then call init as :
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self baseClassInit];
}
return self;
}
- (void)baseClassInit {
//initialize all ivars and properties
}
简短的回答:您需要使用initWithCoder:.
从initWithFrame:文档:
如果您使用 Interface Builder 来设计您的界面,则当您的视图对象随后从 nib 文件加载时,不会调用此方法。nib 文件中的对象被重构,然后使用它们的 initWithCoder: 方法进行初始化,该方法修改视图的属性以匹配存储在 nib 文件中的属性。
如果您使用的是 nib / xib / Storyboard 文件,请使用initWithCoder:. 如果您以编程方式创建视图,则可以使用init或initWithFrame:。