2010-12-21 66 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