与insertSubView的索引值混淆

时间:2012-01-20 22:24:39

标签: iphone ios view

我知道insertSubView会在iPhone应用程序的View层次结构的某个索引处插入一个新视图。

我也明白

insertSubView atIndex:[[self.view subviews] count]

会将subView插入最顶层,这样它就是唯一可见的视图。这类似于addSubview。

然而,我仍然是一个新手,我对“视图”中包含的内容感到有点困惑。

我有一个根控制器,在它的视图中有3个按钮。

root view

我正在玩addSubView以了解它是如何工作的,当我执行insertSubview atIndex:1时,我得到了以下内容:

index 1

看起来我添加的新视图是在按钮1之后但在按钮2和按钮3之前添加的。如果我将索引更改为2,则只显示按钮3,因此看起来新视图正在显示按钮1和2之后但在3之前。

为什么?为什么按钮有单独的子视图索引?我原以为根控制器视图中包含的所有内容都属于单一视图。它们是分开的吗?

1 个答案:

答案 0 :(得分:1)

你看到的是完全正确的。你添加button1,然后按钮2,然后按钮3。所以视图堆栈将是:

button3 - >指数2
button2 - > index 1 button1 - >指数0.

现在,如果你这样做:insertSubview:atIndex:1,你得到:

button3 - >指数3
button2 - >指数2
AnotherView - > index 1 button1 - >指数0.

这样只有button2和button3可见,因为button1被隐藏了,因为“AnotherView”与其框架重叠。


Sim如果你这样做:insertSubview:atIndex:2,你得到:

button3 - >指数3
AnotherView - >指数2
button2 - > index 1 button1 - >指数0.

现在只有button3可见,因为button1和button2都被隐藏了,因为“AnotherView”与它们的框架重叠。

您需要考虑的另一件事是,仅z-index不会决定哪些视图可见。仅当顶视图具有覆盖下面的框架时,才会隐藏下面的视图。从您发布的图片来看,按钮的框架似乎足以显示文本,并且不会占据整个窗口的框架