2011-09-06 40 views
1

我一直在嘗試使用insertSubview:atIndex:下一個又一個插入子視圖。問題是大多數情況下,不是具有較高索引的視圖,而是最後添加的視圖。我注意到,如果我選擇索引0和1,這工作得很好,但在我的情況下,一個視圖需要至少在索引12和另一個需要在上面。的Xcode - insertSubview:atIndex:不工作,因爲我預料到

下面是一些代碼爲例:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 100, 100)]; 
[email protected]"LABEL"; 
[label setBackgroundColor:[UIColor whiteColor]]; 
[self.view insertSubview:label atIndex:13]; 
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btn.frame=CGRectMake(20, 100, 100, 100); 
[btn setBackgroundColor:[UIColor whiteColor]]; 
[self.view insertSubview:btn atIndex:12]; 

我知道我可以插入按鈕後標籤,但在我的情況下,不會解決問題。

我在做什麼錯?

非常感謝您的幫助。

+0

你確定你有12個以上的子視圖嗎? – Nekto

+0

我知道在IB有一個選項Send to Back,它將它放到視圖的最底部,允許您對事物進行分層,但不確定在代碼中確切地調用它。可能值得研究。 –

+0

@Nekto它有多少我已經有子視圖?我沒有得到在索引插入的邏輯。如果我在索引1000插入會發生什麼?我希望它能像CSS中的z-index一樣工作,但顯然並非如此。 – matteok

回答

4

它不象CSS z-index -if一個視圖中工作具有k子視圖,在高於k將具有相同的效果如在索引k添加它,或,換句話說,任何索引插入的圖,將其添加作爲最後(最前面)子視圖。子視圖保持爲連續列表,而不是任意索引的數組。在你的情況下,你可能沒有14個子視圖開始,所以插入一個視圖13和另一個視圖12沒有你想要的效果。

+0

謝謝,這有助於很多。 – matteok

+0

那麼如何才能讓一個子視圖留在所有子視圖之後,而不是將這些子視圖專門放置在我想置頂的子視圖之下呢? – matteok

+0

而不是將這些子視圖添加到始終位於頂層的子視圖所在的視圖中,而是將它們添加到該覆蓋視圖的同級視圖中。換句話說,如果您有視圖A,父視圖和視圖C(疊加視圖(A的子視圖)),則將另一個子視圖B置於A內和C之下,然後將以後創建的子視圖添加爲子視圖B. –

相關問題