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.
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.
b
se eliminaría rápidamente de la subviews
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.
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
Para Swift 4 +. Puedes hacer una extensión a UIView
. Llámalo cuando sea necesario.
extension UIView {
func removeAllSubviews() {
subviews.forEach { $0.removeFromSuperview() }
}
}