Eu estava pensando que talvez algo assim pudesse funcionar:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Eu quero remover todo tipo de subvisualização. Imagens de usuário, botões, campos de texto etc.
Eu estava pensando que talvez algo assim pudesse funcionar:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Eu quero remover todo tipo de subvisualização. Imagens de usuário, botões, campos de texto etc.
b
seria imediatamente removido do subviews
array, causando uma mutação dentro de um loop de enumeração rápido, o que é proibido.
copy
especificador significa que ele faz uma cópia quando definido ; nada é especificado sobre como obter. É bem provável que uma cópia seja retornada, mas isso não faz parte da definição da propriedade.
Respostas:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
É idêntico à sua variante, mas um pouco mais curto.
Você pode usar assim
//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 é a view da qual você deseja remover tudo. você está apenas removendo cada subvisualização fazendo forEach
Para Swift 4 +. Você pode fazer uma extensão para UIView
. Ligue sempre que necessário.
extension UIView {
func removeAllSubviews() {
subviews.forEach { $0.removeFromSuperview() }
}
}