我有10个UILabel,为了简单起见,让它为label0,label1,...,label9。现在,我正在实现一个循环,我需要从适当的循环周期访问适当的标签:
for (int i=0; i<10; i++){
label"i".text = "value of label i";
}
我需要通过将循环循环变量值绑定到它来构造变量名。有什么建议吗?
答案 0 :(得分:5)
据我所知,没有办法像你建议的那样做。但是,您可以使用NSMutableArray
填充UILabel
,然后在索引i
调用该对象以检索i
标签。
创建labelArray
(动态或静态),然后您的for
循环将
for (int i=0; i<10; i++){
[[labelArray objectAtIndex:i] setText:@"value of label i"];
}
答案 1 :(得分:3)
对于每个UILabel
,您可以保留tag
。 tag
是NSInteger
。
所以它本质上可能是你的索引编号......
您可以通过致电父viewWithTag:
上的UIView
来访问标签。
答案 2 :(得分:1)
如何创建这些标签的数组,并使用索引进行迭代?
答案 3 :(得分:-1)
我今天刚刚遇到过这个问题。这似乎是您寻找的原始优雅解决方案。它不需要任何标签或特殊的可变阵列:
for (int i=0; i<10; i++){
((UILabel *)NSClassFromString([NSString stringWithFormat:@"label%i", i])).text = @"value of label i";
}
答案 4 :(得分:-2)
这是一个相当常见的用例。通常,这是通过使用NSMutableDictionary
:
NSMutableDictionary *labelMap = [[NSMutableDictionary alloc] initWithCapacity:10];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label1"];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label2"];
[labelMap setObject:[[[UILabel alloc] init] autorelease] forKey:@"label3"];
// etc
然后,当您想要按名称引用对象时:
for (int i=0; i<10; i++){
NSString *labelKey = [NSString stringWithFormat:@"label%i", i];
[labelMap objectForKey: labelKey].text = "value of label i";
}