我正在寻找一个简单的方法,从一个父视图中删除所有的子视图,而不是一个接一个地删除它们。
//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循环都留下一个视图。我发现这是因为自我。当removeFromSuperview()被调用时,subviews(可能)发生了变化。
为了解决这个问题,我做了:
let subViews: Array = self.subviews.copy()
for (var subview: NSView!) in subViews
{
subview.removeFromSuperview()
}
通过执行.copy(),我可以在改变self的同时删除每个子视图。子视图数组。这是因为复制的数组(子视图)包含对对象的所有引用,并且没有发生变化。
编辑:在你的情况下,我认为你会使用:
let theSubviews: Array = container_view.subviews.copy()
for (var view: NSView!) in theSubviews
{
view.removeFromSuperview()
}
我不知道你是否解决了这个问题,但我最近遇到了一个类似的问题,每次For循环都留下一个视图。我发现这是因为自我。当removeFromSuperview()被调用时,subviews(可能)发生了变化。
为了解决这个问题,我做了:
let subViews: Array = self.subviews.copy()
for (var subview: NSView!) in subViews
{
subview.removeFromSuperview()
}
通过执行.copy(),我可以在改变self的同时删除每个子视图。子视图数组。这是因为复制的数组(子视图)包含对对象的所有引用,并且没有发生变化。
编辑:在你的情况下,我认为你会使用:
let theSubviews: Array = container_view.subviews.copy()
for (var view: NSView!) in theSubviews
{
view.removeFromSuperview()
}