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

bse eliminaría rápidamente de lasubviewsmatriz, lo que provocaría una mutación dentro de un ciclo de enumeración rápido, que está prohibido.copyespecificador 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