如何构造和使用变量名?

时间:2011-08-10 17:05:42

标签: iphone objective-c ios variables

  

可能重复:
  Objective-c create variables in a loop

我有10个UILabel,为了简单起见,让它为label0,label1,...,label9。现在,我正在实现一个循环,我需要从适当的循环周期访问适当的标签:

for (int i=0; i<10; i++){
  label"i".text = "value of label i";
}   

我需要通过将循环循环变量值绑定到它来构造变量名。有什么建议吗?

5 个答案:

答案 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,您可以保留tagtagNSInteger

所以它本质上可能是你的索引编号......

您可以通过致电父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";
}