如何重写initWithFrame:和initWithCoder:在UIView的子类?

我想要inheritanceUIView。 我已经有了一些指定的初始值设定项,我希望我的自定义视图可以从代码或从Nib文件初始化。 所以,苹果告诉我们要使用指定的初始值设定项,但是他们不是自己做的 – initWithCoder:不会调用initWithFrame: 在两种情况下我应该怎样做才能让我的指定初始化器被调用? 有没有办法做到这一点?

用一种方法打包您的特殊初始化。 它可以是私有的(在.m中声明)。 然后重写这两个初始化器,并从它们中调用你的init方法。

 - (void)myInitialization { //do your stuff } - (id)initWithFrame:(CGRect)aRect { self = [super initWithFrame:aRect]; if (self) { [self myInitialization]; } return self; } - (id)initWithCoder:(NSCoder*)aDecoder { self = [super initWithCoder:aDecoder]; if (self) { [self myInitialization]; } return self; } 

如你所说:

initWithFrame: – build议你实现这个方法。 除了此方法之外,您也可以实现自定义初始化方法。

initWithCoder: – 如果从Interface Builder nib文件加载视图并且视图需要自定义初始化,则实现此方法。

我会做的只是一个方法,都会调用,这将有你想在你的UIView实现的常见行为。