2010-09-22 15 views
11

HI, Mam Parentview -> Wiele dzieci. , gdy używam [self bringSubviewToFront: childview] w widoku rodzica, działa dobrze.Ale po dodaniu wnuka do widoku podrzędnego, kiedy używam [self bringSubviewToFront: grandchildview] w widoku rodzica, to nie działa? Jaką pomoc?problem bringSubviewToFront?

Odpowiedz

52

Metoda -[UIView bringSubviewToFront:] działa tylko w przypadku bezpośrednich dzieci, a nie wnuków. Pamiętaj, że hierarchia widoków jest drzewem i zwykle widok wie tylko o swoim "nadrzędnym" (lub superview) i jego bezpośrednich "dzieciach" (lub subviewsach). trzeba by zrobić coś takiego:

// First, get the view embedding the grandchildview to front. 
[self bringSubviewToFront:[grandchildview superview]]; 
// Now, inside that container view, get the "grandchildview" to front. 
[[grandchildview superview] bringSubviewToFront:grandchildview]; 
+2

działać dobrze ... wielki kodu! –

+0

robienie tego rekurencyjnie byłoby jeszcze lepsze –

+1

@ PizzaiolaGorgonzola Dla arbitralnych poziomów zagnieżdżenia, tak, metoda rekurencyjna byłaby drogą do zrobienia. Dla tego prostego przypadku byłoby to jednak przesadą. – DarkDust

0

mój wkład z szybkiej wersji z sprawdzonej rozwiązania

self.bringSubviewToFront(self.grandchildview.superview!) 
self.grandchildview.superview!.bringSubviewToFront(self.grandchildview)