【问题标题】:How to load view from xib如何从xib加载视图
【发布时间】:2014-03-06 06:00:54
【问题描述】:

我有一个 ViewController,比如 VC1,我需要以编程方式在其中加载一个子视图,比如 View1。

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

谁能告诉我如何加载 View1?

我尝试了以下方法:

在 VC1 中,我调用

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

然而事实证明,view1 对象和从 NSBundle 调用中加载的对象并不是一个对象。


更新:

在 View1.xib 文件中,我有一些 IBOutLet 绑定到 View1 类,因此我无法将文件所有者更改为 VC1。

【问题讨论】:

  • UINib 类在这种情况下刚刚为您开发。

标签: ios


【解决方案1】:

如果你只是加载一个 UIView 子类,它的布局在 xib 中定义,那么你不需要设置文件的所有者。相反,您应该将顶级对象的类更改为您的子类(View1),然后使用

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

【讨论】:

  • 哦,非常漂亮的单线!我不知道 firstObject 属性。
【解决方案2】:

这是怎么做的:

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

注意:

在界面生成器中构建View1.xib 视图时,保留默认File's Owner 并将视图类设置为View1

【讨论】:

  • 你是在建议我在 VC1 类中调用它吗?但是View1.xib的文件所有者不是VC1,而是View1
  • 在我的 view1.xib 中,我有一些 IBOutlet 绑定到 View1 类。如果我将文件所有者设置为默认值,则会出现错误:此类与键 XXX 的键值编码不兼容...
  • 您在 xib 中的视图需要是顶级对象。不要将其作为插座连接。
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2017-10-20
  • 2012-05-14
  • 2017-06-18
相关资源
最近更新 更多