以编程方式访问Interface Builder中添加的UIView的子视图

时间:2009-03-20 20:17:06

标签: ios uiview iboutlet

我有一个nib文件,其中我有一个视图,其中包含一个背景图像,一个按钮和另一个覆盖整个屏幕(阴影)需要移动到前面的图像。 在视图中,我正在创建子视图,在创建子视图并使用[self addView]添加它们之后,我需要将阴影图像移到前面。

我目前正在使用tag属性来查找该视图,但我认为可能有更好的方法,通过识别我在Interface Builder中添加的某个名称的子视图。

我尝试添加一个IBOutlet来连接子视图和它的父视图,但它没有用(并且没有意义,因为子视图已经以某种方式连接到它的父视图)。

4 个答案:

答案 0 :(得分:2)

IBOutlets方式应该有效,并且可能是最好的方法。在.h文件中声明它们后,确保在Interface Builder中建立了正确的连接。

答案 1 :(得分:1)

iPhone会延迟加载视图控制器。可能没有像在Kendall指定的那样在initWithCoder或任何init方法中加载nib。

如果要在显示视图之前访问它们,

viewDidLoad是从nib访问任何内容的首选位置。

希望有所帮助。

答案 2 :(得分:0)

您想在什么时候访问子视图?如果您在ViewController的init中尝试,IBOutlets将为零。您可以获得的第一种方法可能是viewDidLoad。

以这种方式做事有意义的原因是IBOutlets只是指向某个组件的直接指针,即使它们已经是其他东西的子视图。只是省了很多狩猎。

答案 3 :(得分:0)

只要您使用viewWithTag:方法,使用标记是查找特定视图的完美有效方法。如果您已经在使用标签,则除非您不喜欢调用viewWithTag,否则无需更改为IBOutlets:。