我正在寻找一个简单的方法,从一个父视图中删除所有的子视图,而不是一个接一个地删除它们。

//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)
}

我错过了什么?

更新

我的应用程序有一个主container_view。为了提供某种导航,我必须将不同的其他视图作为子视图添加到container_view中。

所以,当点击按钮“打开”一个特定的页面,我需要删除所有的子视图,并添加一个新的。

更新2 -一个工作解决方案(OS X)

我想苹果已经解决了这个问题。

现在比以往任何时候都简单,只需拨打:

for view in containerView.subviews{
    view.removeFromSuperview()
}

当前回答

你有没有试过

for o : AnyObject in self.subviews {
     if let v = o as? NSView {
         v.removeFromSuperview()
     }
}

其他回答

你有没有试过

for o : AnyObject in self.subviews {
     if let v = o as? NSView {
         v.removeFromSuperview()
     }
}

试试这个:

for view in container_view.subviews {
    view.removeFromSuperview()
}

仅删除特定类的子视图-这是我在Xcode6.1.1中唯一工作的Swift代码。 假设你想要删除的子视图类型是UIButton…

for subView in nameofmysuperview.subviews {
    if subView.isKindOfClass(UIButton) {
        subView.removeFromSuperview()
    }
}

你得试试这个

func clearAllScrollSubView ()
{
    let theSubviews = itemsScrollView.subviews

    for (var view) in theSubviews
    {

        if view is UIView
        {
            view.removeFromSuperview()
        }

    }
}

对于Swift 4.+

extension UIView {
     public func removeAllSubViews() {
          self.subviews.forEach({ $0.removeFromSuperview() })

}

我希望这对你有用。