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 ?
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 ?
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.
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)
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.