16

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

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

我究竟做错了什么?

4

2 回答 2

27

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    
}
于 2013-02-28T16:33:47.803 回答
22

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

initWithFrame:文档:

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

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

于 2013-02-28T16:54:38.733 回答