使用Interface Builder嵌套自定义类/ XIB

时间:2009-11-17 18:13:37

标签: objective-c iphone iphone-sdk-3.0 uikit interface-builder

我会尽量做到尽可能短。

我编写了一个自定义类,它使用几个IBOutlet属性扩展了UIView,并且它与这些IBOutlet链接的XIB相关联。

然后,我想要将该类嵌入到其他一些XIB(例如,表格单元格)中,然后让它工作。

似乎当我在新的XIB中嵌入该自定义类时,它无法识别与之关联的原始XIB,因此它要求我将IBOutlet重置为新XIB上的接口元素。这太蹩脚了。

有没有人明白我想做什么并且有一个好的方法?

2 个答案:

答案 0 :(得分:8)

以下是我设法完成这项工作的方法:

在Interface Builder中
打开你的外笔尖并执行此操作:

  • 添加UIView以定义您希望内部笔尖显示的空间。
  • 从库中添加UIViewController对象,将其Nib Name属性设置为内部nib文件的名称(不带扩展名)。
  • 在外部视图控制器中为这两个项目创建IBOutlets并将它们连接起来。 (我将它们称为 innerView innerViewController 。)
  • 不要将内部视图控制器中定义的任何IBOutlet连接到外部nib文件中的任何内容,只需将它们保持未连接状态。

在Xcode中
在外部视图控制器的 viewDidLoad 方法中,添加以下两行:

[self.innerView addSubview:self.innerViewController.view];
self.innerViewController.view.frame = CGRectMake(0, 0, self.innerView.frame.size.width, self.innerView.frame.size.height);

如果您的外部笔尖是自定义UITableViewCell,请将这些行放在 awakeFromNib 方法中。

Build&运行!

答案 1 :(得分:1)

我假设你只是简单地将UIViews放在一个nib中供UIViewController使用,它纯粹是在代码中。 Apple称之为detached nib file

按照我链接的指南了解详情以及如何使其发挥作用的示例。

关于在Interface Builder中将视图嵌入到另一个视图中,您需要add a UIView element from the Library进入父视图,set its class in the Inspector。设置嵌入视图的类后,您的IBOutlet应该是可见的。