【发布时间】:2013-10-17 18:40:18
【问题描述】:
我有 UIView,它有 n 个子视图。假设 n 为 600 个子视图。我知道有一种方法可以通过以下代码隐藏所有子视图
for (UIView *subView in mainView.subviews) {
subView.hidden = YES;
}
但是是否有任何其他适当的方法或 API 来隐藏所有子视图。提前致谢。
【问题讨论】:
标签: iphone objective-c uiview subview
我有 UIView,它有 n 个子视图。假设 n 为 600 个子视图。我知道有一种方法可以通过以下代码隐藏所有子视图
for (UIView *subView in mainView.subviews) {
subView.hidden = YES;
}
但是是否有任何其他适当的方法或 API 来隐藏所有子视图。提前致谢。
【问题讨论】:
标签: iphone objective-c uiview subview
Objective-C (KVC)
[mainView.subviews setValue:@YES forKeyPath:@"hidden"];
斯威夫特:
mainView.subviews.forEach { $0.isHidden = true }
【讨论】:
hidden 属性。将所有需要隐藏的子视图放在一个容器视图中,并在您想要全部隐藏时避免触摸每个子视图。
如果您想隐藏所有 600 个子视图而不创建 for 循环,我认为还有另一种简单的方法。查看 UIView 的 hidden 属性的文档。它说:
隐藏的视图从它的窗口中消失并且不接收输入事件。但是,它仍保留在其父视图的子视图列表中,并像往常一样参与自动调整大小。 隐藏带有子视图的视图具有隐藏这些子视图及其可能具有的任何视图后代的效果。这种效果是隐含的,不会改变接收者后代的隐藏状态。
因此,制作一个 UIView(我们称之为 containerView)并使其成为您的 mainView 的子视图。然后把你所有的 600 个子视图变成 containerView 的子视图,而不是你的 mainView。您现在可以用一条简单的代码隐藏所有 600 个子视图(以及 containerView):
mainView.containerView.hidden=YES;
你的 mainView 当然会保持可见。
【讨论】: