隐藏UIView子视图

时间:2013-10-17 18:40:19

标签: iphone objective-c uiview subview

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

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

但是有没有其他正确的方法或API可以隐藏所有子视图。谢谢提前。

2 个答案:

答案 0 :(得分:35)

Objective-C(KVC)

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

夫特:

mainView.subviews.forEach { $0.isHidden = true }

答案 1 :(得分:15)

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

  

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

所以制作一个UIView(让我们称之为containerView)并使其成为mainView的子视图。然后获取所有600个子视图,并将它们设为containerView的子视图,而不是mainView。您现在可以使用一个简单的行隐藏所有600个子视图(以及containerView):

mainView.containerView.hidden=YES;

当然,您的mainView仍然可见。