Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将所有UIL标签设置为隐藏_Objective C_Css_Ios_Xcode - Fatal编程技术网

Objective c 将所有UIL标签设置为隐藏

Objective c 将所有UIL标签设置为隐藏,objective-c,css,ios,xcode,Objective C,Css,Ios,Xcode,有没有办法将所有UILabel设置为隐藏在Objective-C中?我根据if语句显示和隐藏标签,感觉自己在编写非常庞大的代码。是否有方法选择所有UILabel以setHidden:YESa la CSS 编辑:我需要一次看到其中一个,而不是一次全部隐藏 谢谢 如果您始终只需要1个UILabel,则可以重复使用相同的UILabel。优点是使用的内存少一点,并且不需要管理所有的UILabels。缺点是,您需要重新计算/存储坐标以放置UILabel,并存储UILabel的内容(管理转移到此位置)

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

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


谢谢

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


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

我不认为你可以像CSS那样做,但是我们可以使用一个技巧来避免在
UILabel
s到
setHidden
之间循环

您可以将所有
UILabel
s作为透明
UIView
的子视图。透明
ui
视图的
size
origin
应进行配置,以便坐标与不使用透明视图时的坐标相同(以避免混淆)。如果要隐藏所有
UILabel
s,只需隐藏整个透明
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

这有一个缺点,即所有的
UILabel
s必须位于现有视图的顶部或下方。这意味着您无法在现有视图中将某些标签自由调整为位于特定图元的顶部,而将某些标签自由调整为位于特定图元的下方。为此,您需要创建另一个视图,那里的情况会变得非常混乱。

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

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
没有其他方法可以做到这一点


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

这会起作用,但我需要一次只显示一个标签。按照我的理解,隐藏视图也会将它们全部隐藏,但显示一个视图可能不起作用,或者会显示所有标签,这些标签仍然带有以前的
setHidden:NO
:/@斯内根:你在问题中没有提到这一点!那么,如果您一次只需要一个UILabel可见,那么是否可以对所有内容重复使用单个UILabel?对不起!您可以动态更改标签的内容吗?这可以完全解决问题!(编辑了问题。再次抱歉)@Sneagan:当然,但你需要重新计算坐标,并知道要替换的内容。这看起来可能符合我的意图。谢谢