2010-11-04 21 views

Répondre

118

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

Cela supprimera les indicateurs de défilement s'ils sont affichés, mais l'OP ne les concerne pas comme indiqué dans les commentaires ci-dessous. – Jessedc

+0

+1, Awesome .. super c'est juste une seule ligne :) – mAc

+2

Est-ce sur le fil principal? – Plot

32

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.

+0

Je n'utilise pas les indicateurs de toute façon. Bon point cependant.+1 – Moshe

+0

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

+4

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

1

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.

2

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.

0

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