16

我有 UIView 有 n 个子视图。假设 n 为 600 个子视图。我知道有一种方法可以通过以下代码隐藏所有子视图

for (UIView *subView in mainView.subviews) {
subView.hidden = YES;
}

但是有没有其他适当的方法或API来隐藏所有的子视图。提前谢谢。

4

2 回答 2

41

目标-C (KVC)

[mainView.subviews setValue:@YES forKeyPath:@"hidden"];

迅速:

mainView.subviews.forEach { $0.isHidden = true }
于 2013-10-17T18:49:08.723 回答
15

如果您想隐藏所有 600 个子视图而不创建 for 循环,我认为还有另一种简单的方法。查看UIView的隐藏属性的文档。它说:

隐藏的视图从它的窗口中消失并且不接收输入事件。但是,它仍保留在其父视图的子视图列表中,并像往常一样参与自动调整大小。隐藏带有子视图的视图具有隐藏这些子视图及其可能具有的任何视图后代的效果。这种效果是隐含的,不会改变接收者后代的隐藏状态。

所以制作一个 UIView(我们称它为 containerView)并使其成为您的 mainView 的子视图。然后把你所有的 600 个子视图变成 containerView 的子视图,而不是你的 mainView。您现在可以用一条简单的代码隐藏所有 600 个子视图(以及 containerView):

mainView.containerView.hidden=YES;

当然,您的 mainView 将保持可见。

于 2013-10-18T01:17:24.263 回答