Comment supprimer toutes les sous-vues d'une UIScrollview ?
Réponses
Trop de publicités?Soit scrollView
être une instance de UIScrollView
.
En Objective-C, c'est assez simple. Il suffit d'appeler makeObjectsPerformSelector:
comme ça :
Objective-C :
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
En Swift, vous n'avez pas cet accès à l'exécution, vous devez donc gérer l'itération vous-même.
Swift :
Une version concise, d'ici :
scrollview.subviews.map { $0.removeFromSuperview() }
Une façon plus descriptive de le faire (à partir de aquí ) suppose scrollview.subviews
:
let subviews = self.scrollView.subviews
for subview in subviews{
subview.removeFromSuperview()
}
Je pense qu'il faut juste faire attention et ne pas supprimer les barres d'indicateurs de défilement.
Le code donné par Adam Ko est court et élégant mais il peut supprimer les indicateurs de défilement horizontal et vertical.
Je fais habituellement
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
En supposant que vous n'ayez pas ajouté manuellement des UIImageView au défilement.
En plus de ce que dit Ricardo de Cillo, dans mon cas, j'avais une vue tableau dont les vues secondaires contenaient des images que je voulais supprimer.
for (UIView *v in self.tableview.subviews) {
if ([v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
La suppression du ! dans la commande if, et le changement scrollview
a self.tableview
a supprimé toutes les images, mais a laissé la vue de la table intacte.
Si vous souhaitez supprimer les uiimageviews dans scrollview.subviews, et que vous souhaitez également conserver les indicateurs verticaux et horizontaux. Vous pouvez définir un "tag" spécial pour identifier les vues et exclure les indicateurs verticaux et horizontaux dont les tags sont 0 par défaut.