我正在尝试简化我正在处理的有八个UILabel的小项目,并且我经常根据存储在数组中的数据将这些标签的背景颜色更改为不同的颜色。
目前我的代码运行一个从0到7的for循环(占8个UILabels)。在for循环中,它将检查for循环的数字,并使用新的背景颜色修改相应的UILabel,如下所示:
for (int y = 0; y < 8; y++) {
SEL mySelect = NSSelectorFromString([backgroundColorData objectAtIndex:y]);
UIColor* myUILabelColor = nil;
if ([UIColor respondsToSelector: mySelect]){
myUILabelColor = [UIColor performSelector:mySelect];
}
switch (y) {
Label0.backgroundColor = myUILabelColor;
break;
case 1:
Label1.backgroundColor = myUILabelColor;
break;
case 2:
Label2.backgroundColor = myUILabelColor;
break;
case 3:
Label3.backgroundColor = myUILabelColor;
break;
case 4:
Label4.backgroundColor = myUILabelColor;
break;
case 5:
Label5.backgroundColor = myUILabelColor;
break;
case 6:
Label6.backgroundColor = myUILabelColor;
break;
case 7:
Label7.backgroundColor = myUILabelColor;
break;
}
我希望能够通过将这8个UILabel放入一个数组来缩小代码,并且可能将代码读取如下:
for (int y = 0; y < 8; y++) {
SEL mySelect = NSSelectorFromString([backgroundColorData objectAtIndex:y]);
UIColor* myUILabelColor = nil;
if ([UIColor respondsToSelector: mySelect]){
myUILabelColor = [UIColor performSelector:mySelect];
}
// This piece of code would deal with modifying the backgroundColor of UILabel(y) within my array of UILabels.
}
或者现在我考虑一下,也许我可以在一个大的打击中完成所有这一切,我不需要经历八次for循环,但我可以直接将我的backgroundcolordata数组的内容发送到我的UILabel阵列?
非常感谢任何帮助或提示。
答案 0 :(得分:3)
首先,我只会在UIColor
中存储实际的backgroundColorData
个对象,而不是颜色的名称。然后将UILabel
个对象存储在一个数组中。然后整个代码如下所示:
NSUInteger count = [self.labels count];
for (NSUInteger index = 0; index < count; ++index) {
UIColor *color = [self.backgroundColors objectAtIndex:index];
[[self.labels objectAtIndex:index] setBackgroundColor:color];
}
答案 1 :(得分:3)
您可以按名称获取标签,这有时可能是一种有用的技术:
NSString *name = [NSString stringWithFormat:@"Label%d", y];
UILabel *label = [self valueForKey:name];
backgroundColor = myUILabelColor = name;
P.S。实例应该以小写字母开头。即'label1',而不是'Label1'。