web-dev-qa-db-fra.com

Supprimer toutes les sous-vues d'un UIScrollView?

Comment supprimer toutes les sous-vues d'une vue UIScrollview?

46
Moshe

Soit scrollView une instance de UIScrollView.

Dans Objective-C, c'est assez facile. Il suffit d'appeler makeObjectsPerformSelector:, ainsi:

Objectif-C:

[scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

Dans Swift, vous n'obtenez pas cet accès d'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 manière plus descriptive de le faire (de ici ) suppose que scrollview.subviews:

let subviews = self.scrollView.subviews
for subview in subviews{
    subview.removeFromSuperview()
}
123
koo

Je pense qu'il suffit d'être prudent et de ne pas supprimer les barres d'indicateur 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 d'habitude

for (UIView *v in scrollView.subviews) {
  if (![v isKindOfClass:[UIImageView class]]) {
    [v removeFromSuperview];
  }
}

En supposant que vous n'avez pas ajouté UIImageView au défilement manuellement.

34
Ricardo de Cillo

En plus de Ricardo de Cillo, dans mon cas, j'avais une vue de table qui avait des vues d'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 remplacez scrollview par self.tableview a supprimé toutes les images, mais n'a pas modifié la vue du tableau.

2
mylogon

Si vous souhaitez supprimer 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.

1
Chiakie

Compléter la Swift version concise d'une réponse précédente (Swift 3.0 ready):

_ = scrollView.subviews.filter { $0 is UIImageView }.map { $0.removeFromSuperview() }
0
Gui Moura