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() } ```

Original source

Related problems