2014-03-05 272 views
1

我有一個ViewController,比如VC1,我需要通過編程方式加載一個子視圖View1。如何從xib加載視圖

我有一個名爲View1.xib的xib文件,其文件所有者是View1。

誰能告訴我如何加載View1?

我曾嘗試以下方法:

在VC1,我叫

View1 view1 = [[View1 alloc] init]; 
[[NSBundle mainBundle] loadNibNamed:@"View1" owner:view1 options:nil]; 
[self.view addSubview:view1]; 

然而,事實證明,在廠景對象,從一個NSBundle調用加載的對象是不一樣的。


更新時間:

在View1.xib文件,我有一些IBOutlet中邊界的視圖1類,所以我不能更改文件所有者VC1。

+0

「UINib」類在這種情況下就是爲您開發的。 – holex

回答

2

如果你只是加載一個UIView子類,它的佈局定義在xib中,那麼你不需要設置File的所有者。相反,您應該將頂級對象的類更改爲您的子類(View1)的類,然後使用

View1 *view1 = [[NSBundle mainBundle] loadNibNamed:@"View1" owner:nil options:nil].firstObject; 
+0

Oooh非常好的單線!我不知道那個'firstObject'屬性。 – hgwhittle

1

這裏是如何做到這一點:

NSArray *xib = [[NSBundle mainBundle] loadNibNamed:@"View1" owner:self options:nil]; 
View1 *view1 = [xib objectAtIndex:0]; 
[self addSubview:view1]; 

注:

當建立在Interface Builder一個View1.xib視圖,採用默認值File's Owner並設置視圖類爲View1

+0

你是否建議我在VC1類中調用它?但是,View1.xib的文件所有者不是VC1,但View1 – HanXu

+0

我更新了我的答案,描述瞭如何執行此操作。 – RaffAl

+0

在我的view1.xib中,我有一些IBOutlet綁定到類View1。如果我將文件所有者設置爲默認值,那麼會出現錯誤:此類不是密鑰編碼兼容密鑰XXX ... – HanXu