如何使子类引用其超类的XIB?

时间:2013-01-22 00:41:01

标签: objective-c xcode4.5

我有一个BaseClass UIViewController类。它运作良好。 BaseClass有BaseClass.xib

然后我创建了该基类的子类。

原来并没有连接插座。

我把

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

是的,它就是这样。它被称为。我不确定aDecoder是什么。我认为它是childClass的XIB的表示,它不存在。我希望用超级的xib初始化super。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}
永远不会打电话给

事实上,我对自己很困惑。当我们有xib时,似乎-(id)initWithCoder:(NSCoder *)aDecoder是被调用的那个。所以我想知道initWithNibName用于什么?

我试过

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithNibName:NSStringFromClass([super class]) bundle:nil];
    return self;
}

2 个答案:

答案 0 :(得分:4)

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundleUIViewController的指定初始值设定项。所以在你继承的类中,

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:@"BaseClass" bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

每当Apple将初始化程序标记为指定的初始值设定项时,其他初始值设定项将仅指向指定的初始值设定项。您不需要实现其他初始化程序。

NIB加载使用initWithCoder,这就是你在加载nib时看到它被调用的原因。

答案 1 :(得分:0)

如果要更改对象的初始化方式或执行其他初始化,则只需覆盖init方法。从xib加载UIViewController(或任何内容)时,在调用init方法时,您的商店仍无法连接。

一旦加载了xib中的所有对象并建立了连接,就会调用awakeFromNib。实现它以查看是否所有内容都已正确加载(它应该)。