【问题标题】:Hide UIView subviews隐藏 UIView 子视图
【发布时间】: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


    【解决方案1】:

    Objective-C (KVC)

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

    斯威夫特:

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

    【讨论】:

    • 谢谢,它有效。这是除 for 循环之外的正确和更好的编码方式吗?
    • 我不确定它本身是否合适或更好,但 kvc/kvo 为您提供了强大的功能来减少您的代码库。查看nshipster.com/kvc-collection-operatorsnshipster.com/key-value-observing 将帮助您了解将来如何使用它。
    • 这是一个不错的简短解决方案,但 KVC 并不神奇:它仍然需要遍历整个子视图数组,为每个子视图设置 hidden 属性。将所有需要隐藏的子视图放在一个容器视图中,并在您想要全部隐藏时避免触摸每个子视图。
    【解决方案2】:

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

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

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

    mainView.containerView.hidden=YES;
    

    你的 mainView 当然会保持可见。

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 2011-06-07
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多