Je pensais que quelque chose comme ça pourrait fonctionner:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Je souhaite supprimer tout type de sous-vue. UIImages, boutons, champs de texte, etc.
iphone
objective-c
ios
uikit
dgund
la source
la source
b
cela serait rapidement supprimé dusubviews
tableau, provoquant une mutation dans une boucle d'énumération rapide, ce qui est interdit.copy
spécificateur signifie qu'il effectue une copie lorsqu'il est défini ; rien n'est spécifié sur l'obtention. Il est fort probable qu'une copie soit renvoyée, mais cela ne fait pas partie de la définition de la propriété.Réponses:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
C'est identique à votre variante, mais légèrement plus courte.
la source
self.view.subviews.forEach({ $0.removeFromSuperview() })
Version identique dans Swift.
la source
Rapide:
extension UIView { func removeAllSubviews() { for subview in subviews { subview.removeFromSuperview() } } }
la source
Vous pouvez utiliser comme ça
//adding an object to the view view.addSubView(UIButton()) // you can remove any UIControls you have added with this code view.subviews.forEach { (item) in item.removeFromSuperview() }
vue est la vue dont vous souhaitez tout supprimer. vous supprimez simplement chaque sous-vue en faisant forEach
la source
Pour Swift 4 + .Vous pouvez faire une extension à
UIView
. Appelez-le chaque fois que nécessaire.extension UIView { func removeAllSubviews() { subviews.forEach { $0.removeFromSuperview() } } }
la source