删除所有子视图?
当我的应用程序回到其根视图控制器时,在viewDidAppear:
方法中,我需要删除所有子视图。
我怎样才能做到这一点?
编辑:感谢cocoafan: NSView
和UIView
不同的方式处理事实,这种情况被混淆了。 对于NSView
(仅适用于桌面Mac开发),您可以简单地使用以下内容:
[someNSView setSubviews:[NSArray array]];
对于UIView
(仅适用于iOS开发),您可以安全地使用makeObjectsPerformSelector:
因为subviews
属性将返回子视图数组的副本:
[[someUIView subviews]
makeObjectsPerformSelector:@selector(removeFromSuperview)];
感谢Tommy指出makeObjectsPerformSelector:
在枚举时修改subviews
数组(对于NSView
,而不是UIView
)。
有关更多详细信息,请参阅此SO问题。
注意:使用这两种方法中的任何一种都会删除主视图中包含的所有视图,并释放它们(如果它们未保留在别处)。 从Apple的removeFromSuperview文档:
如果接收者的超级视图不为零,则此方法释放接收者。 如果您打算重新使用视图,请务必在调用此方法之前保留它,并确保在完成视图或将视图添加到其他视图层次结构后将其释放。
从您的根控制器获取所有子视图,并发送每个removeFromSuperview:
NSArray *viewsToRemove = [self.view subviews];
for (UIView *v in viewsToRemove) {
[v removeFromSuperview];
}
在Swift中,你可以使用这样的功能性方法 :
view.subviews.forEach { $0.removeFromSuperview() }
作为比较, 必要的方法将如下所示:
for subview in view.subviews {
subview.removeFromSuperview()
}
这些代码片段仅适用于iOS / tvOS,但macOS上的情况有点不同。
链接地址: http://www.djcxy.com/p/74375.html上一篇: Remove all subviews?