【问题标题】:How to change dynamically the xib of a UIVIewController如何动态更改 UIVIewController 的 xib
【发布时间】:2011-05-28 18:46:40
【问题描述】:

例如,我有一个 UIVIewController “controller1”。该控制器通过 initWithNibName... 与“file1.xib”实例化。 我想将我的“controller1”的xib文件动态更改为“file2.xib”

继续:

“controller1”“file1.xib” 我想动态拥有: "controler1" "file2.xib"

我该怎么做?

希望我是清楚的。

【问题讨论】:

  • 你想通过切换xib来实现什么。为什么要这样做?我们或许可以提供替代方案

标签: iphone ios nib xib viewcontroller


【解决方案1】:

当您想更改 UIViewController 中的视图时,只需使用以下代码:

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

【讨论】:

  • 内存不足警告会导致视图被卸载 - 你的视图控制器如何知道从哪里重新加载它的视图 - 新的 xib 或旧的(提示:它会加载旧的)
  • 好的,我用这个,效果很好。只需保留原始视图对象以供以后使用。谢谢!
  • @deanWombourne 总是可以有一个布尔值来表示视图已经切换。
【解决方案2】:

我有两个回应:

1) 为什么 - 这不是你通常会做的事情 - 是什么让这种情况变得特别?事实上,我将把它编辑得更加强调 --> 不要这样做

2) 如果您必须这样做,您可以删除视图并重新加载它,尽管 NSBundle's loadNibNamed:owner: 将新的 xib 和 self 作为所有者传递给它。

【讨论】:

  • 是的,你应该将 file2.xib 链接到另一个 UIViewController,然后加载它。
  • 它可以是同一类视图控制器——只是实例不同!
  • 啊,是的,[[UIViewController alloc] initWithNibName:@"aNib" bundle:nil];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 2014-07-08
  • 2018-12-21
相关资源
最近更新 更多