对UIView进行子类化.永远不会调用init方法

joh*_*doe 16 cocoa-touch uiviewcontroller uikit uiview ios

UIView在界面构建器上有一个.在我的视图控制器中,我有一个IBOutlet MyUIView指向UIView界面构建器.

我将类更改UIView为" MyUIView"(自定义UIView类),但似乎没有init触发子类的任何方法.

我究竟做错了什么?

Ano*_*dya 27

而不是init你需要先调用initWithCoder然后调用init为:

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

- (void)baseClassInit {

    //initialize all ivars and properties    
}
Run Code Online (Sandbox Code Playgroud)


Aar*_*ger 22

简短的回答:你需要使用initWithCoder:.

来自initWithFrame:文档:

如果使用Interface Builder设计接口,则随后从nib文件加载视图对象时不会调用此方法.重构nib文件中的对象,然后使用其initWithCoder:方法进行初始化,该方法修改视图的属性以匹配存储在nib文件中的属性.

如果您使用的是nib/xib/Storyboard文件,请使用initWithCoder:.如果您以编程方式创建视图,则可以使用initinitWithFrame:.