objective-c iphone uiscrollview subviews

objective-c - scrollview swift



¿Eliminar todas las subvistas de un UIScrollView? (5)

Además de Ricardo de Cillo, en mi caso tenía una vista de tabla que tenía imageviews en las subvistas que quería eliminar.

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

La eliminación de! en el comando if y cambie scrollview a self.tableview eliminó todas las imágenes, pero dejó la vista de tabla intacta.

¿Cómo elimino todas las subvistas de un UIScrollview?


Complementando la versión concisa Swift de una respuesta anterior (Swift 3.0 listo):

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


Creo que solo debes tener cuidado y no borrar las barras indicadoras de desplazamiento.

El código proporcionado por Adam Ko es corto y elegante, pero puede eliminar los indicadores de desplazamiento horizontal y vertical.

Usualmente hago

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

Suponiendo que no tienes UIImageView agregado manualmente al desplazamiento.


Si desea eliminar uiimageviews en scrollview.subviews, y también desea mantener los indicadores verticales y horizontales. Puede establecer una "etiqueta" especial para identificar vistas y excluir los indicadores verticales y horizontales cuyas etiquetas son 0 por defecto.


Deje que scrollView sea ​​una instancia de UIScrollView .

En Objective-C, es bastante fácil. Simplemente llame a makeObjectsPerformSelector: así:

C objetivo:

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

En Swift, no obtienes ese acceso en tiempo de ejecución, por lo que debes manejar la iteración por ti mismo.

Rápido:

Una versión concisa, desde aquí :

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

Una forma más descriptiva de hacer esto (desde here ) asume scrollview.subviews :

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