3

Можно создать дубликат:
create multiple variables based on an int count
Objective C Equivalent of PHP's “Variable Variables”Dynamic Variable Имена IOS

Я хотел бы использовать некоторые динамические имена переменных в цикле, и я озадачен о том, как на самом деле ссылайтесь на переменные.

У меня есть серия UILabels title 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

+0

Да, вы можете быть уверены, что быстрое перечисление действительно работает для массивов. Я постоянно использую это! –

+0

Как я программировал через IB так долго и никогда не знал о IBOutletCollections? Боже, я должен дать вам 50% денег, сделанных в то время, когда я буду экономить с этого момента. Спасибо! –

0

Вы можете создать массив с UILabel ** вместо использования NSArray. Таким образом, вы можете использовать элементы массива без литья в UILabel

Смежные вопросы