我正在尝试将UIView子类化。我已经有一些指定的初始化程序,我希望有可能从代码或Nib文件初始化我的自定义视图。因此,Apple告诉我们使用指定的初始值设定项,但他们不是自己做的 - initWithCoder:
不会调用initWithFrame:
。在两种情况下,如何调用指定的初始化程序,我该怎么办?有没有办法做到这一点?
答案 0 :(得分:42)
在一个方法中打包您的特殊初始化。它可以是私有的(在.m中声明)。 然后覆盖两个初始值设定项并从其中调用init-method。
- (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;
}
答案 1 :(得分:5)
正如你所说:
initWithFrame: - 建议您实现此方法。您 除了或之外,还可以实现自定义初始化方法 而不是这种方法。
initWithCoder: - 如果从中加载视图,请实现此方法 Interface Builder nib文件和您的视图需要自定义 初始化。
我要做的只是一种双方都会调用的方法,这种方法会在UIView
中实现您想要实现的常见行为。