How to remove all subviews of a view in Swift?
macos, swift, view
Solution
EDIT: (thanks Jeremiah / Rollo)
By far the best way to do this in Swift for iOS is:
view.subviews.forEach({ $0.removeFromSuperview() }) // this gets things done
view.subviews.map({ $0.removeFromSuperview() }) // this returns modified array
^^ These features are fun!
let funTimes = ["Awesome","Crazy","WTF"]
extension String {
func readIt() {
print(self)
}
}
funTimes.forEach({ $0.readIt() })
//// END EDIT
Just do this:
for view in self.view.subviews {
view.removeFromSuperview()
}
Or if you are looking for a specific class
for view:CustomViewClass! in self.view.subviews {
if view.isKindOfClass(CustomViewClass) {
view.doClassThing()
}
}
Problem
I'm looking for a simple method to remove at once all subviews from a superview instead of removing them one by one. ``` //I'm trying something like this, but is not working let theSubviews : Array = container_view.subviews for (view : NSView) in theSubviews { view.removeFromSuperview(container_view) } ``` What I am missing? UPDATE My app has a main `container_view`. I have to add different other views as subviews to `container_view` in order to provide a sort of navigation. So, when clicking the button to "open" a particular page, I need to remove allsubviews and add the new one. UPDATE 2 - A working solution (OS X) I guess Apple fixed it. Now it is more easy than ever, just call: ``` for view in containerView.subviews{ view.removeFromSuperview() } ```