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

问题描述 投票:0回答:4

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

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

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

ios uiview iboutlet
4个回答
2
投票

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


1
投票

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

如果要在显示视图之前访问它们,viewDidLoad是从nib访问任何内容的首选位置。

希望有所帮助。


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.