2010-12-21 60 views
2

例如,我有一個UIVIewController「controller1」。該控制器通過「file1.xib」與initWithNibName ...實例化。 我要動態地改變我的「控制器1」的XIB文件「file2.xib」如何動態更改UIVIewController的xib

要恢復:

「控制器1」 < - >「file1.xib」 ,我想動態有: 「controler1」< - >「file2.xib」

我該怎麼做?

希望我很清楚。

+1

什麼是你想通過切換廈門國際銀行來實現。爲什麼要這樣做?我們可能能夠提供替代 – 2010-12-21 11:45:29

回答

7

當你想改變的觀點在一個UIViewController纔剛剛使用此代碼:

NSArray *nibObjs = [[NSBundle mainBundle] loadNibNamed:@"file2" owner:self options:nil]; 
UIView *aView = [nibObjs objectAtIndex:0]; 
self.view = aView; 
+0

什麼導致視圖被卸載的低內存警告呢 - 你的視圖控制器怎麼知道從哪裏重新加載它的視圖 - 新的xib或舊的(提示:它會加載舊的) – deanWombourne 2010-12-21 11:50:09

+0

好吧,我用這個,我工作很好。 只需要保留原始視圖對象以便稍後使用它。 謝謝! – ayorosmage 2010-12-21 14:12:44

+0

@deanWombourne總是可以有一個布爾值來表示視圖已經切換。 – NebulaFox 2010-12-21 14:30:44

1

我有兩個反應:

1)爲什麼 - 這是不是你通常會做什麼 - 是什麼讓這種情況下特別?事實上,我要編輯這個更加強調 - >不要這樣做 < - 在你不知道的UIViewController中會有各種各樣的依賴關係(例如,如果有低內存警告和你的視圖控制器卸載它的視圖,哪個xib會從何時加載顯示它的視圖?)

2)如果你拼命想要,你可以刪除視圖然後重新加載它NSBundle's loadNibNamed:owner:傳遞新的xib和自己作爲所有者。

+0

是的,你應該將file2.xib鏈接到另一個UIViewController,並加載它。 – NebulaFox 2010-12-21 11:47:34

+0

它可以是同一類視圖控制器 - 只是不是同一個實例! – deanWombourne 2010-12-21 11:52:39

+0

啊是的,[[UIViewController alloc] initWithNibName:@「aNib」bundle:nil]; – NebulaFox 2010-12-21 14:32:28