2010-11-04 8 views

risposta

118

Lasciare scrollView essere un'istanza di UIScrollView.

In Objective-C, è piuttosto facile. Basta chiamare makeObjectsPerformSelector:, in questo modo:

Objective-C:

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

In Swift, non si ottiene che l'accesso runtime, quindi bisogna gestire in realtà l'iterazione da soli.

Swift:

Una versione concisa, from here:

scrollview.subviews.map { $0.removeFromSuperview() } 

Un modo più descrittivo per fare questo (da here) assume scrollview.subviews:

let subviews = self.scrollView.subviews 
for subview in subviews{ 
    subview.removeFromSuperview() 
} 
+3

Ciò rimuovere gli indicatori di scorrimento se sono impostati per la visualizzazione, ma l'OP non è interessato a questi come indicato nei commenti seguenti. – Jessedc

+0

+1, Fantastico .. ottimo è solo una riga :) – mAc

+2

È presente nella discussione principale? – Plot

32

io ti penso solo fare attenzione e non cancellare le barre dell'indicatore di scorrimento.

Il codice fornito da Adam Ko è breve ed elegante ma può eliminare gli indicatori di scorrimento orizzontale e verticale.

faccio di solito

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

Suposing non si dispone di UIImageView aggiunto il rotolo manualmente.

+0

Non sto usando gli indicatori comunque. Buon punto però.+1 – Moshe

+0

Per quanto ho testato, il mio codice non ha rimosso gli indicatori di scorrimento, credo che sia perché UIScrollView carica gli indicatori pigramente ogni volta che deve essere visualizzato, ma è comunque un buon punto da notare. – koo

+4

In realtà penso che questa non sia una buona soluzione, perché se si dispone di sottoview UIImageView che si desidera rimuovere? – Tony

1

Se si desidera rimuovere le immagini uguali in scrollview.subviews e si desidera mantenere anche gli indicatori verticali e orizzontali. È possibile impostare un "tag" speciale per identificare le viste ed escludere gli indicatori verticali e orizzontali i cui tag sono 0 per impostazione predefinita.

2

Oltre a Ricardo de Cillo, nel mio caso ho avuto una vista tabella che aveva immagini nelle sottoview che volevo rimuovere.

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

La rimozione di! nel comando if, e modificare scrollview a self.tableview rimosso tutte le immagini, ma ha lasciato intoccata la vista tabella.

0

A complemento della versione concisa Swift da una risposta precedente (Swift 3.0 pronto):

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