Estaba pensando que tal vez algo como esto podría funcionar:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Quiero eliminar todo tipo de subvista. UIImages, botones, campos de texto, etc.
iphone
objective-c
ios
uikit
dgund
fuente
fuente
b
se eliminaría rápidamente de lasubviews
matriz, lo que provocaría una mutación dentro de un ciclo de enumeración rápido, que está prohibido.copy
especificador significa que hace una copia cuando se establece ; no se especifica nada sobre la obtención. Es muy probable que se devuelva una copia, pero eso no forma parte de la definición de propiedad.Respuestas:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
Es idéntico a su variante, pero un poco más corto.
fuente
self.view.subviews.forEach({ $0.removeFromSuperview() })
Versión idéntica en Swift.
fuente
Rápido:
extension UIView { func removeAllSubviews() { for subview in subviews { subview.removeFromSuperview() } } }
fuente
Puedes usar así
//adding an object to the view view.addSubView(UIButton()) // you can remove any UIControls you have added with this code view.subviews.forEach { (item) in item.removeFromSuperview() }
view es la vista de la que desea eliminar todo. simplemente está eliminando cada subvista haciendo forEach
fuente
Para Swift 4 +. Puedes hacer una extensión a
UIView
. Llámalo cuando sea necesario.extension UIView { func removeAllSubviews() { subviews.forEach { $0.removeFromSuperview() } } }
fuente