2010-09-22 13 views
11

HI, J'ai parentview -> plusieurs enfants. lorsque j'utilise [self bringSubviewToFront: childview] dans parentview, ça marche bien, mais après avoir ajouté petitchildview à childview, quand j'utilise [self bringSubviewToFront: petitchildview] dans parentview, ça n'a pas fonctionné?Problème bringSubviewToFront?

Répondre

52

La méthode -[UIView bringSubviewToFront:] ne fonctionne que pour les enfants directs, pas pour les petits-enfants. Souvenez-vous que la hiérarchie des vues est une arborescence, et normalement une vue ne connaît que son "parent" (ou superview) et ses "enfants" directs (ou sous-vues). Vous devez faire quelque chose comme ceci:

// 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

travail bien ... grand code! –

+0

le faire de manière récursive serait encore mieux –

+1

@PizzaiolaGorgonzola Pour des niveaux d'imbrication arbitraires, oui, une méthode récursive serait la voie à suivre. Pour ce cas simple, ce serait exagéré, cependant. – DarkDust

0

ma contribution avec la version rapide de la solution vérifiée

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