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