46 votes

Supprimer toutes les sous-vues d'une UIScrollView ?

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

123voto

koo Points 1825

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()
}

34voto

Ricardo de Cillo Points 513

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.

2voto

mylogon Points 35

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.

1voto

Chiakie Points 26

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.

-2voto

Amit Singh Points 1003

Si vous voulez supprimer les sous-vues de UIScrollView, vous pouvez utiliser le code suivant.

[yourUIScrollViewName makeObjectsPerformSelector:@selector(removeFromSuperview)];

L'indicateur de défilement sera supprimé du code ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X