Stavo pensando che forse qualcosa del genere potrebbe funzionare:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Voglio rimuovere ogni tipo di sottoview. Immagini, pulsanti, campi di testo ecc.
Stavo pensando che forse qualcosa del genere potrebbe funzionare:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Voglio rimuovere ogni tipo di sottoview. Immagini, pulsanti, campi di testo ecc.
b
sarebbe stato prontamente rimosso subviews
dall'array, causando una mutazione all'interno di un ciclo di enumerazione veloce, che è vietato.
copy
specificatore significa che fa una copia quando impostato ; nulla è specificato su come ottenere. È molto probabile che venga restituita una copia, ma non fa parte della definizione della proprietà.
Risposte:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
È identico alla tua variante, ma leggermente più corto.
Puoi usare in questo modo
//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 è la vista dalla quale vuoi rimuovere tutto. stai solo rimuovendo ogni sottoview eseguendo forEach
Per Swift 4+. Puoi creare un'estensione a UIView
. Chiamalo ogni volta che è necessario.
extension UIView {
func removeAllSubviews() {
subviews.forEach { $0.removeFromSuperview() }
}
}