继承UIView。 init方法永远不会被调用

问题描述:

我在接口构建器上有一个UIView。在我的视图控制器中,我有一个IBOutlet MyUIView指向接口构建器上的UIView继承UIView。 init方法永远不会被调用

我改变了UIView的类“MyUIView”(自定义UIView类),但它似乎没有任何的子类的init方法被解雇。

我在做什么错?

+1

你可以展示你的代码吗? – nsgulliver 2013-02-28 16:31:13

+0

代码中没有任何东西!在界面生成器中,我选择UIView并将类设置为“ShadowView”。我在ShadowView init方法中放置了断点,但它永远不会进入这些方法。 – 2013-02-28 16:34:45

相反的init需要调用initWithCoder第一然后调用init为:

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

- (void)baseClassInit { 

    //initialize all ivars and properties  
} 
+0

谢谢我会检查出来! – 2013-02-28 16:41:06

+0

您还需要*实现*'initWithCoder:',如代码那样。简单地从一些随机的地方调用它,而单独重写'init'不会完成这项工作。 – 2013-03-02 02:53:27

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

initWithFrame:文档:

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

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