Je recherche une méthode simple pour supprimer à la fois toutes les sous-vues d'un superview au lieu de les supprimer une par une.
//I'm trying something like this, but is not working
let theSubviews : Array = container_view.subviews
for (view : NSView) in theSubviews {
view.removeFromSuperview(container_view)
}
Qu'est-ce que je manque?
METTRE À JOUR
Mon application a un fichier principal container_view
. Je dois ajouter différentes autres vues en tant que sous-vues container_view
afin de fournir une sorte de navigation.
Ainsi, lorsque je clique sur le bouton pour «ouvrir» une page particulière, je dois supprimer toutes les sous-vues et ajouter la nouvelle.
UPDATE 2 - Une solution de travail (OS X)
Je suppose qu'Apple l'a corrigé.
Maintenant, c'est plus facile que jamais, il suffit d'appeler:
for view in containerView.subviews{
view.removeFromSuperview()
}
Réponses:
EDIT: (merci Jeremiah / Rollo)
La meilleure façon de le faire dans Swift pour iOS est de loin:
^^ Ces fonctionnalités sont amusantes!
//// FIN EDIT
Faites juste ceci:
Ou si vous recherchez une classe spécifique
la source
result of call to 'map' is unused
n'est pas une erreur.Array.map
dans la plupart des langues retournera le tableau modifié. La méthode équivalente qui ne renvoie pas de tableau seraitview.subviews.forEach
.for view:CustomViewClass! in self.view.subviews where view.isKindOfClass(CustomViewClass) { view.doClassThing() }
Pour iOS / Swift, pour me débarrasser de toutes les sous-vues que j'utilise:
pour me débarrasser de toutes les sous-vues d'une classe particulière (comme UILabel), j'utilise:
la source
Le code peut être écrit plus simplement comme suit.
la source
Cela devrait être la solution la plus simple.
(voir Supprimer toutes les sous-vues? pour d'autres méthodes)
Notez qu'il s'agit d'une question MacOS et que cette réponse ne fonctionne que pour MacOS . Cela ne fonctionne pas sur iOS.
la source
NSView
(OS X) etUIView
(iOS).NSView
, pas pour iOS etUIView
. Seules les personnes ne se soucient pas de lire la question et les balises, elles sont donc remplies de réponses iOS.Je ne sais pas si vous avez réussi à résoudre cela, mais j'ai récemment rencontré un problème similaire où la boucle For laissait une vue à chaque fois. J'ai trouvé que c'était parce que self.subviews était muté (peut-être) lorsque le removeFromSuperview () était appelé.
Pour résoudre ce problème, j'ai fait:
En faisant .copy (), je pourrais effectuer la suppression de chaque sous-vue tout en faisant muter le tableau self.subviews. Cela est dû au fait que le tableau copié (sous-vues) contient toutes les références aux objets et n'est pas muté.
EDIT: Dans votre cas, je pense que vous utiliseriez:
la source
let subViewsArray: Array = (parentView.subviews as NSArray).copy() as Array<NSView>
Essaye ça:
la source
Extension pour supprimer toutes les sous-vues, elle est rapidement supprimée.
la source
Essaye ça:
MISE À JOUR : Si vous vous sentez aventureux, vous pouvez créer une extension sur l'UIView comme indiqué ci-dessous:
Et appelez-le comme ceci:
la source
Dans xcodebeta6, cela a fonctionné.
la source
J'ai écrit cette extension:
Pour que vous puissiez utiliser self.view.lf_removeAllSubviews dans un UIViewController. Je mettrai cela dans la version swift de mon https://github.com/superarts/LFramework plus tard, quand j'aurai plus d'expérience dans swift (1 jour d'exp jusqu'à présent, et oui, pour l'API, j'ai abandonné le soulignement).
la source
Swift 3
Si vous ajoutez une balise à votre vue, vous pouvez supprimer une vue spécifique.
la source
view.subviews.filter({$0.tag != 321}).forEach({$0.removeFromSuperview()})
?Swift 5
Je crée 2 méthodes différentes pour supprimer la sous-vue. Et c'est beaucoup plus facile à utiliser si nous les mettons
extension
la source
Votre syntaxe est légèrement décalée. Assurez-vous de lancer explicitement.
la source
Tu dois essayer ça
la source
Pour supprimer uniquement les sous-vues d'une classe spécifique - c'était le seul code Swift qui fonctionnait pour moi dans Xcode6.1.1. En supposant que les seules sous-vues que vous souhaitez supprimer sont de type UIButton ...
la source
Bon mot:
Je pense que cette approche est plus lisible que les "one-liners" utilisant map ou forEach . Les raccourcis pourchaque et carte peuvent être difficiles à comprendre, car la logique est plus abstraite.
la source
Pour Swift 3
J'ai fait comme suit car le simple fait de supprimer de superview n'effaçait pas les boutons du tableau.
la source
Essayez ceci, j'ai testé ceci:
la source
Pour
Swift 4.+
j'espère que c'est une utilisation complète pour vous.
la source
as-tu essayé quelque chose comme
la source