我在屏幕上有一个网格。它是 UIView 子类的一个实例。在网格的单元格中,我想在用户与应用程序交互时添加 subview 的实例——UIView 的另一个自定义子类。 subview 本身是我想在 XIB 中设计的东西。它的控件代表该特定单元格的状态。它由几个 UIControl(比如一个标签和一个按钮)组成。
我已经知道我可以使用动态加载 NIB
[[NSBundle mainBundle] loadNibNamed:@"MyNIB" owner:self options:nil];
而且我知道如果我将 NIB 中的文件所有者属性设置为负责将这些 subview 添加到的 View 的 View Controller ,它们就会起作用。我用它来将一些外部 NIB 添加到主应用屏幕中的 UIScrollview。
我想知道的是如何动态地执行此操作?我想说这样的话:
MySubviewCell * sv = [[NSBundle mainBundle] loadNibNamed:@"MyNIB" owner:self options:nil];
[sv setFoo:@"Foo"];
[sv setBar:123];
[sv setFrame:myrect];
[mainView addSubview:sv];
当然 loadNibNamed
不会返回 subview 实例,而是返回 View 中所有控件的数组。
编辑 MySubviewCell NIB 中的文件所有者将是一个问题:没有,也不可能:我不知道我需要多少。我应该使用 ArrayController 之类的东西吗?
EDIT 2 请忽略之前的编辑;我把它留在了答案中,但这不是我认为的问题。
我可以这样做吗?
谢谢
最佳答案
这通常在设计 nib 中的表格 View 单元格时使用。您有两个选择:
- 返回数组的索引 0 处的对象将是您的 nib 中的“根”对象。
- 在 MySubviewCell 类型的 View Controller 中创建一个 socket 。将 Nib 中文件的所有者类设置为 View Controller ,并将导出链接到您感兴趣的 Nib 中的元素。当您使用所有者自身加载 Nib 时,导出将被填充。然后您可以配置它,将它添加到您的阵列中,并将导出设置回 nil 以准备为下一个实例再次加载 Nib 。
关于ios - 从 NIB 动态创建 UIView 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280319/