Comment supprimer toutes les sous-vues d'un UIScrollview?Supprimer toutes les sous-vues d'un UIScrollView?
Répondre
Soit scrollView
être une instance de UIScrollView
.
En Objective-C, c'est plutôt facile. Il suffit d'appeler makeObjectsPerformSelector:
, comme ceci:
Objective-C:
[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
Swift, vous ne recevez pas que l'accès d'exécution, de sorte que vous devez gérer effectivement l'itération vous-même.
Swift:
Une version concise, from here:
scrollview.subviews.map { $0.removeFromSuperview() }
Une façon plus descriptive pour le faire (de here) suppose scrollview.subviews
:
let subviews = self.scrollView.subviews
for subview in subviews{
subview.removeFromSuperview()
}
Je pense que vous venez devez faire attention et ne pas supprimer les barres de l'indicateur de défilement.
Le code donné par Adam Ko est court et élégant mais il peut effacer les indicateurs de défilement horizontal et vertical.
que je fais habituellement
for (UIView *v in scrollView.subviews) {
if (![v isKindOfClass:[UIImageView class]]) {
[v removeFromSuperview];
}
}
vous n'avez pas Suposing UIImageView est ajouté à la défiler manuellement.
Je n'utilise pas les indicateurs de toute façon. Bon point cependant.+1 – Moshe
Pour ce que j'ai testé, mon code n'a pas supprimé les indicateurs de défilement, je crois que c'est parce que UIScrollView charge les indicateurs paresseusement chaque fois qu'il doit être affiché, mais c'est un bon point à noter cependant. – koo
En fait, je pense que ce n'est pas une bonne solution, car si vous avez des sous-vues UIImageView que vous voulez supprimer? – Tony
Si vous souhaitez supprimer uiimageviews dans scrollview.subviews, vous souhaitez également conserver les indicateurs verticaux et horizontaux. Vous pouvez définir une "balise" spéciale pour identifier les vues et exclure les indicateurs verticaux et horizontaux dont les balises sont 0 par défaut.
En plus de Ricardo de Cillo, dans mon cas, j'avais une vue de table qui avait des images dans les sous-vues 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 modifiez scrollview
à self.tableview
, toutes les images ont été supprimées, mais la vue de la table n'a pas été modifiée.
Complétant la version concise Swift d'une réponse précédente (Swift 3.0 prêt):
_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
la version __Swift__ est [ici] (http://stackoverflow.com/a/27065076/607368) –