2012-09-02 51 views
1

有没有办法将所有UILabels设置为在Objective-C中隐藏?我正在根据if声明显示和隐藏标签,觉得自己写的代码非常笨重。有没有办法选择所有的UILabels到setHidden:YES a la CSS?设置全部UILabels隐藏

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

谢谢!

回答

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 

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

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

+0

这看起来像它可能适合我想要做的。谢谢! – Sneagan

1

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


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

我不认为你可以像CSS这样做,但我们可以使用一个技巧,以避免必须遍历所有UILabel s到setHidden

您可以将所有UILabel s作为透明UIView的子视图。透明UIViewsizeorigin应配置为使坐标与不使用透明视图时相同(以避免混淆)。当你想隐藏所有的UILabel时,你可以隐藏整个透明的UIView

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

+0

这将工作,但我需要一次只有一个标签可见。我理解它的方式隐藏视图也会将它们全部隐藏起来,但是显示其中一个可能不起作用,或者会从之前透露所有仍带'setHidden:NO'的标签。 :/ – Sneagan

+1

@Sneagan:你在问题中没有提到这个问题!那么,如果你一次只需要一个UILabel,那么是否可以重用一个单一的UILabel? – nhahtdh

+0

对不起!你可以动态更改标签的内容吗?这可以完全解决问题! (编辑问题。对不起) – Sneagan