Я думал, может сработать что-то вроде этого:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Я хочу удалить все виды подвидов. UIImages, кнопки, текстовые поля и т. Д.
iphone
objective-c
ios
uikit
dgund
источник
источник
b
это будет немедленно удалено изsubviews
массива, что вызовет мутацию в быстром цикле перебора, что запрещено.copy
означает, что он делает копию, когда установлен ; о получении ничего не указано. Вполне вероятно, что будет возвращена копия, но это не часть определения свойства.Ответы:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
Он идентичен вашему варианту, но немного короче.
источник
self.view.subviews.forEach({ $0.removeFromSuperview() })
Идентичная версия в Swift.
источник
Swift:
extension UIView { func removeAllSubviews() { for subview in subviews { subview.removeFromSuperview() } } }
источник
Вы можете использовать это так
//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 - это представление, из которого вы хотите все удалить. вы просто удаляете каждое подпредставление, выполняя forEach
источник
Для Swift 4+ можно сделать расширение
UIView
. Звоните при необходимости.extension UIView { func removeAllSubviews() { subviews.forEach { $0.removeFromSuperview() } } }
источник