3

可能重复:
create multiple variables based on an int count
Objective C Equivalent of PHP's “Variable Variables”动态变量名的iOS

我想在使用一些动态变量名的for循环和难倒为如何实际参考变量。

我有一系列UILabels标题poll0 - poll8。使用for循环,我将它们的text值设置为另一个从数组中相应数字引用的值。例如:

for (int i = 0; i < [pollData count]; i++) { 
    label(i value).text = [NSString stringWithFormat:@"%@", [[pollData objectAtIndex:i] toString]]; //sorry for the java-esque method names, just create what I'm used to 
} 

如何使用i值?

回答

5

你不能完全按照你的要求去做。最好的办法是通过数组把你的标签在阵列和循环:

NSArray *labels = [NSArray arrayWithObjects:poll0, poll1, poll2, ..., nil]; 
for (UILabel *label in labels) { 
    label.text = [[pollData objectAtIndex:i] toString]; 
} 

你可能也想看看IBOutletCollections因为他们会允许你组标签不将书面阵列上面的数组初始化代码。相反,你把这个在您的.h文件中,然后勾标签出口达在Interface Builder您的所有标签:

@property (nonatomic, retain) IBOutletCollection(UILabel) NSArray *labels; 
+0

打我吧:)我总是警惕使用这样的快速枚举,但文档说它应该按照正确的顺序进行。 – rosslebeau 2012-03-30 02:35:25

+0

是的,您可以确定快速枚举确实可以用于数组。我用它所有的时间! – 2012-03-30 02:36:36

+0

我是如何通过IB编程这么久并且从不知道IBOutletCollections的?我的上帝,我应该给你50%的钱,我将从这个时候开始储蓄。谢谢! – 2012-03-30 02:44:44

0

您可以创建的UILabel数组**,而不是使用的NSArray的。通过这种方式,你可以使用数组元素而不需要投射到UILabel