Myślałem, że może coś takiego może zadziałać:
for (UIView* b in self.view.subviews)
{
[b removeFromSuperview];
}
Chcę usunąć każdy rodzaj podglądu. UIImages, przyciski, pola tekstowe itp.
iphone
objective-c
ios
uikit
dgund
źródło
źródło
b
zostanie to natychmiast usunięte zsubviews
tablicy, powodując mutację w szybkiej pętli wyliczania, co jest zabronione.copy
oznacza, że po ustawieniu tworzy kopię ; nic nie jest określone na temat pobierania. Jest całkiem prawdopodobne, że kopia zostanie zwrócona, ale nie jest to część definicji właściwości.Odpowiedzi:
[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
Jest identyczny z twoim wariantem, ale nieco krótszy.
źródło
self.view.subviews.forEach({ $0.removeFromSuperview() })
Identyczna wersja w Swift.
źródło
Szybki:
extension UIView { func removeAllSubviews() { for subview in subviews { subview.removeFromSuperview() } } }
źródło
Możesz używać w ten sposób
//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() }
widok to widok, z którego chcesz usunąć wszystko. po prostu usuwasz wszystkie podziały, wykonując forEach
źródło
Dla Swift 4 +. Możesz rozszerzyć
UIView
. Zadzwoń, kiedy to konieczne.extension UIView { func removeAllSubviews() { subviews.forEach { $0.removeFromSuperview() } } }
źródło