26

我正在尝试继承 UIView。我已经有一些指定的初始化程序,我希望有可能从代码或 Nib 文件初始化我的自定义视图。因此,Apple 告诉我们使用指定的初始化程序,但他们自己并没有这样做——initWithCoder:不调用initWithFrame:. 我应该怎么做才能在这两种情况下调用我指定的初始化程序?有没有办法做到这一点?

4

2 回答 2

42

将您的特殊初始化打包在一种方法中。它可以是私有的(在 .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;
}
于 2013-03-07T19:07:00.497 回答
5

如你所说:

initWithFrame: - 建议你实现这个方法。除了或代替此方法,您还可以实现自定义初始化方法。

initWithCoder: - 如果您从 Interface Builder nib 文件加载视图并且您的视图需要自定义初始化,请实施此方法。

我要做的只是一个双方都会调用的方法,它具有您想要在UIView.

于 2013-03-07T19:04:04.153 回答