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

时间:2013-02-28 16:30:08

标签: ios cocoa-touch uiview uiviewcontroller uikit

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

我将UIView的类更改为“MyUIView”(自定义UIView类),但似乎没有触发子类的init方法。

我做错了什么?

2 个答案:

答案 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:。如果您是以编程方式创建视图,则可以使用initinitWithFrame: