我正在寻找一个简单的方法,从一个父视图中删除所有的子视图,而不是一个接一个地删除它们。
//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()
}
下面是另一种方法,它允许你对UIView实例(或UIView子类)的任何集合调用操作。这使得在.subviews后插入filter之类的东西变得很容易,这样你可以更有选择性,或者在其他UIViews集合上调用这个。
extension Array where Element: UIView {
func removeEachFromSuperview() {
forEach {
$0.removeFromSuperview()
}
}
}
使用示例:
myView.subviews.removeEachFromSuperview()
// or, for example:
myView.subivews.filter { $0 is UIImageView }.removeEachFromSuperview()
另外,你也可以用UIView扩展完成同样的事情(尽管这不能在一些任意的UIView实例数组上调用):
extension UIView {
func removeSubviews(predicate: ((UIView) -> Bool)? = nil)
subviews.filter(
predicate ?? { _ in true }
).forEach {
$0.removeFromSuperview()
}
}
}
使用示例:
myView.removeSubviews()
myView.removeSubviews { $0 is UIImageView }