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

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

当前回答

我写了这个扩展:

extension UIView {
    func lf_removeAllSubviews() {
        for view in self.subviews {
            view.removeFromSuperview()
        }
    }
}

你可以使用self。view。UIViewController中的lf_removeAllSubviews。稍后我会把它放在我的https://github.com/superarts/LFramework的swift版本中,当我在swift方面有更多的经验时(到目前为止1天的经验,是的,对于API我放弃了下划线)。

其他回答

试试这个,我测试过了:

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

斯威夫特3

如果您向视图添加标记,则可以删除特定的视图。

for v in (view?.subviews)!
{
    if v.tag == 321
    {
         v.removeFromSuperview()
    }
 }

试试这个:

var subViews = parentView.subviews as Array<UIView>

      for someView in subViews
      {
          someView.removeFromSuperview()
      }

更新:如果你喜欢冒险,那么你可以在UIView上做一个扩展,如下所示:

extension UIView
{
    func removeAllSubViews()
    {
       for subView :AnyObject in self.subviews
       {
            subView.removeFromSuperview()
       }
    }

}

像这样叫它:

parentView.removeAllSubViews()

在xcodebeta6中,这是可行的。

    var subViews = self.parentView.subviews
    for subview in subViews as [UIView]   {
        subview.removeFromSuperview()
    }

我写了这个扩展:

extension UIView {
    func lf_removeAllSubviews() {
        for view in self.subviews {
            view.removeFromSuperview()
        }
    }
}

你可以使用self。view。UIViewController中的lf_removeAllSubviews。稍后我会把它放在我的https://github.com/superarts/LFramework的swift版本中,当我在swift方面有更多的经验时(到目前为止1天的经验,是的,对于API我放弃了下划线)。