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

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

当前回答

一行程序:

while view.subviews.count > 0  { (view.subviews[0] as? NSView)?.removeFromSuperview() } 

其他回答

这是你一直在寻找的一句俏皮话:

view.subviews.filter({$0.tag == 321}).forEach({$0.removeFromSuperview()})

别忘了标记你的视图(someView.)Tag = 321),然后用此代码删除它。

代码可以写得更简单,如下所示。

view.subviews.forEach { $0.removeFromSuperview() }

你的语法有点不对。确保显式强制转换。

 let theSubviews : Array<NSView> = container_view.subviews as Array<NSView>
 for view in theSubviews {
     view.removeFromSuperview()
 }

试试这个,我测试过了:

  let theSubviews = container_view.subviews
  for subview in theSubviews {
      subview.removeFromSuperview()
  }

对于iOS/Swift,要摆脱我使用的所有子视图:

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

来摆脱我使用的特定类(如UILabel)的所有子视图:

for v in view.subviews{
   if v is UILabel{
      v.removeFromSuperview()
   }
}