设置所有UILabels隐藏

时间:2012-09-02 03:27:32

标签: objective-c css ios xcode

有没有办法将所有UILabel设置为Objective-C中的隐藏?我正在显示和隐藏基于if语句的标签,感觉我写的是非常笨重的代码。有没有办法选择所有UILabel到setHidden:YES一个CSS?

编辑:我需要一次看到其中一个,而不是一次隐藏。

谢谢!

2 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:1)

如果您始终只需要1 UILabel,则可以重复使用相同的UILabel。优点是您可以使用更少的内存,而无需管理所有UILabel。缺点是你需要重新计算/存储坐标以放置UILabel并存储UILabel的内容(管理层转移到此)。


现在需求已更改,以下答案不再有效。但是,如果有人想 隐藏/显示所有标签 ,我仍会保留它。

我认为你不能像CSS那样做,但是我们可以使用一个技巧来避免必须遍历所有UILabelsetHidden < / p>

您可以将所有UILabel作为透明UIView的子视图。应配置透明size的{​​{1}}和origin,以使坐标与不使用透明视图时相同(以避免混淆)。当您想要隐藏所有UIView时,您可以隐藏整个透明UILabel

这有一个缺点,即所有UIView必须位于现有视图的顶部或下方。这意味着您无法自由地将某些标签调整到某个元素的顶部,而某些标签则位于现有视图的某个元素的下方。你需要为此目的创建另一个视图,事情会变得非常混乱。

相关问题