2013-01-22 20 views
2

我得到了一個BaseClass UIViewController類。它運作良好。 BaseClass has BaseClass.xib如何讓子類引用其超類的XIB?

然後我創建了該基類的一個子類。

原來沒有連接的插座。

我把

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

而且是有其道理。它叫。我不確定解碼器是什麼。我認爲這是childClass的XIB的表示,它不存在。我希望超級用超級的xib初始化。

- (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; 
} 
+0

你如何初始化你的視圖控制器?使用'UIViewController'的'initWithNibName:bundle:'或'NSBundle''loadNibNamed:owner:'? – DrummerB

+0

initWithNibName:bundle: –

回答

4

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundleUIViewController指定初始化。因此,在你的繼承類中,每當Apple將初始值設定爲指定的初始值設定項時,其他初始值設定項只會指向指定的初始值設定項。你不需要實現其他的初始化器。

NIB加載使用initWithCoder,這就是爲什麼當加載nib時看到它被調用。

0

如果要更改對象初始化的方式或執行其他初始化,只需重寫init方法。當從xib加載UIViewController(或任何物品)時,當調用init方法時,您的插座將不會連接。

一旦加載了xib中的所有對象並建立了連接,就會調用awakeFromNib。實現這一點,看看是否一切正常加載(它應該)。