329 votes

Supprimer toutes les sous-vues ?

Quand mon application revient à son contrôleur de vue racine, en la `` méthode, j’ai besoin de supprimer toutes les sous-vues.

Comment est-ce que je peux faire cela ?

574voto

e.James Points 51680

Edit: merci à cocoafan: Cette situation est confuse par le fait qu' NSView et UIView gérer les choses différemment. Pour NSView (ordinateur de bureau Mac développement uniquement), vous pouvez simplement utiliser les éléments suivants:

[someNSView setSubviews:[NSArray array]];

Pour UIView (développement iOS uniquement), vous pouvez utiliser en toute sécurité makeObjectsPerformSelector: parce que l' subviews propriété renvoie une copie de la matrice de sous-vues:

[[someUIView subviews]
 makeObjectsPerformSelector:@selector(removeFromSuperview)];

Merci à Tommy pour préciser que makeObjectsPerformSelector: semble modifier l' subviews tableau alors qu'il est en train d'être énumérés (ce qui n'est pour l' NSView, mais pas pour UIView).

Veuillez voir ce DONC, la question pour plus de détails.

Remarque: l'Utilisation de ces deux méthodes de supprimer tous les avis que votre vue principale contient et de les libérer, s'ils ne sont pas conservés ailleurs. À partir de la documentation d'Apple sur removeFromSuperview:

Si le récepteur est superview n'est pas nul, cette méthode permet de libérer le récepteur. Si vous prévoyez de réutiliser le point de vue, être sûr de les conserver avant l'appel de cette méthode et assurez-vous de libérer le cas échéant, lorsque vous avez fini avec elle ou après l'ajouter à un autre point de vue de la hiérarchie.

174voto

Matthew McGoogan Points 2532

Obtenez tous les sous-vues de votre contrôleur de racine et envoyer chacun un removeFromSuperview :

13voto

Mohd Rahib Points 31

Si vous souhaitez supprimer toutes les sous-vues sur votre UIView (ici yourview), puis écrire le code ci-dessous à votre clic sur le bouton...

8voto

simpleBob Points 3040

Lors de la suppression de tous les sous-vues, c'est une bonne idée de commencer à supprimer à la fin du tableau et de garder la suppression de jusqu'à ce que vous atteignez le début. Ceci peut être accompli avec ces deux lignes de code:

for (int i=mySuperView.subviews.count-1; i>=0; i--)
        [[mySuperView.subviews objectAtIndex:i] removeFromSuperview];

NOTE

Vous devez PAS supprimer le sous-vues dans l'ordre normal, car il peut provoquer un plantage si un élément est supprimé avant l' removeFromSuperview message a été envoyé à tous les objets. (Évidemment, la suppression du dernier élément ne serait pas provoquer un crash)

Par conséquent, le code

[[someUIView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

doit PAS être utilisé.

Citation de la documentation d'Apple sur makeObjectsPerformSelector:

Envoie à chaque objet du tableau le message identifié par un sélecteur, en commençant avec le premier objet et continue à travers la tableau pour le dernier objet.

(ce qui serait le mauvais sens à cet effet)

1voto

Jayprakash Dubey Points 1194

Afin d’éliminer toutes les sous-vues syntaxe :

Utilisation :

Cette méthode est présente dans le fichier NSArray.h et utilise l’interface de NSArray(NSExtendedArray)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X