1

有没有办法将所有 UILabel 设置为隐藏在 Objective-C 中?我正在根据if语句显示和隐藏标签,感觉我正在编写非常庞大的代码。有没有办法将所有 UILabel 选择setHidden:YES为 la CSS?

编辑:我需要其中一个一次可见,而不是一次全部隐藏。

谢谢!

4

2 回答 2

2

如果所有标签都位于同一视图中,则可以使用它的subviews属性:

for (UIView *subview in self.view.subviews) {
    if ([subview isKindOfClass:[UILabel class]]) {
        subview.hidden = YES;
    }
}

如果有许多带有标签的视图,您甚至可以为整体添加一个类别UIView

@interface UIView (HideLabels)

- (void)hideAllLabels:(BOOL)hide withExcludedLabel:(UILabel *)label;

@end

@implementation UIView (HideLabels)

- (void)hideAllLabels:(BOOL)hide withExcludedLabel:(UILabel *)label
{
    for (UIView *subview in self.view.subviews) {
        if (subview != label && [subview isKindOfClass:[UILabel class]]) {
            subview.hidden = YES;
        }
    }
}

@end

没有其他方法可以做到这一点。

编辑:上面的代码根据您的需要更新。

于 2012-09-02T03:43:09.300 回答
1

如果您始终只需要 1 个UILabel,则可以重复使用相同的UILabel. 好处是你使用的内存少了一点,而且你不需要管理所有的UILabels。缺点是您需要重新计算/存储坐标来放置UILabel和存储的内容UILabel(管理转移到这个)。


现在要求已经改变,下面的答案不再有效。但是,我仍然保留它,以防有人想要隐藏/显示所有标签

我不认为你可以像 CSS 那样做,但我们可以使用一个技巧来避免遍历所有UILabels 到setHidden.

你可以把所有的UILabels 作为一个透明的子视图UIView。应该配置透明的sizeand ,以便与不使用透明视图时的坐标相同(以避免混淆)。当你想隐藏所有s 时,你可以隐藏整个 transparent 。originUIViewUILabelUIView

这有一个缺点是所有的UILabels 必须在现有视图的顶部或之下。这意味着您不能自由地将某些标签调整为位于某个元素的顶部,而将某些标签调整为位于现有视图上的某个元素的下方。您需要为此创建另一个视图,那里的事情会变得非常混乱。

于 2012-09-02T03:41:21.797 回答