UIView应如何获得对其子女的引用?

时间:2012-07-20 12:32:42

标签: iphone cocoa-touch ios5 uiview children

我有一个带有根视图的xib,它是一个UIView子类。该视图应如何获取我在Interface Builder中声明的子视图的引用?

显然,ViewController可以与插座连接,但是UIView呢?

2 个答案:

答案 0 :(得分:14)

Outlets是UIViewController对象的属性,它们(几乎总是)引用UIView对象(或UIView的子类)的实例。

UIViewController有一个UIView,当UIViewController加载initWithNibNamed:时,它是XIB文件的内容。您可以在UIViewController中设置出口,然后通过拖动到列表中的“文件所有者”项,或者通过拖动到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。

答案 1 :(得分:4)

尝试[view viewWithTag:tagOfChildView];