【发布时间】:2012-07-20 12:32:41
【问题描述】:
我有一个带有作为 UIView 子类的根视图的 xib。这个视图应该如何获得对我在 Interface Builder 中声明的子视图的引用?
显然 ViewController 可以与 outlet 连接,但是 UIView 呢?
【问题讨论】:
标签: iphone cocoa-touch ios5 uiview children
我有一个带有作为 UIView 子类的根视图的 xib。这个视图应该如何获得对我在 Interface Builder 中声明的子视图的引用?
显然 ViewController 可以与 outlet 连接,但是 UIView 呢?
【问题讨论】:
标签: iphone cocoa-touch ios5 uiview children
Outlets 是 UIViewController 对象的属性,它(几乎总是)引用 UIView 对象的实例(或 UIView 的子类)。
一个 UIViewController 有一个 UIView,当 UIViewController 加载 initWithNibNamed: 时,它就是 XIB 文件的内容。您可以在 UIViewController 中设置 outlet,然后通过拖动到列表中的“File's Owner”项或拖动到 Xcode 助手编辑器中的代码,将它们绑定到 XIB 中的各种子视图。
如果您只想使用代码,有多种选择。一种方法是直接访问基于其tag 属性的视图。例如:
[myView viewWithTag:42];
要考虑的另一种方法是 UIView 有一个名为 subviews 的属性,它是一个子视图数组。您可以遍历它们并根据需要访问视图。为了区分它们,您可以根据情况做几件事。您可以在视图上设置标签,然后使用它们。
NSArray *subviews = myView.subviews;
for(UIView *view in subviews){
if(tag == 42){
// Do something with that view
}
}
或者,如果您正在寻找一种特定类型的视图,例如 UISwitch,这样的东西可能在简单的情况下工作:
for(id view in subviews){
if([view isKindOfClass:NSClassFromString(@"UISwitch")]){
// Do something with that view, since it's a switch
}
}
如果您使用标签,您可以在代码中设置它们,或者使用 Interface Builder。
【讨论】:
试试[view viewWithTag:tagOfChildView];
【讨论】: