Как создать в коде имена IBOutlet, чтобы их можно было изменить?

Скажем, у меня есть несколько UILabels, которые были настроены в IB и подключены к IBOulets в коде (label1, label2, label3, label4)

Как мне создать эти имена переменных в коде, чтобы я мог изменять текст каждой из них в цикле, где метки берутся из NSArray.

Вот псевдокод:

labelArray = [NSArray arrayWithObjects:@"this", @"array", @"has", @"a", @"random", @"amount", @"of", @"items", nil];
for (int i = 0; i < [labelArray count]; i++) 
{
    // labelx is the constructed name of the IBOutlet
    lablex.text = [labelArray objectAtIndex:i];

}

Как мне построить labelx выше? Можно ли это сделать с помощью блоков?


person cannyboy    schedule 03.08.2010    source источник
comment
lableArray имеет динамический размер, верно? И вы хотите сопоставить каждый элемент в этом массиве с UILabel? Но у вас нет динамического количества ярлыков? Если вы действительно этого хотите, вы можете в конечном итоге использовать - (id) valueForKey: (NSString *) key (developer.apple.com/mac/library/documentation/Cocoa/Reference/)   -  person V1ru8    schedule 03.08.2010


Ответы (2)


Вам нужно будет инициализировать массив в каком-то месте, используя

labelArray = [NSArray arrayWithObjects:@"this", @"array", @"has", nil];
uiLabelArray = [NSArray arrayWithObjects:label1,label2,label3,nil];

тогда

for (int i = 0; i < [uiLabelArray count]; i++) 
{
    [uiLabelArray objectAtIndex:i].text = [labelArray objectAtIndex:i];
}
person mvds    schedule 03.08.2010
comment
У меня уже есть labelArray. Проблема заключается в том, чтобы преобразовать этот массив в текст в UILabels внутри цикла. - person cannyboy; 03.08.2010

Вы можете использовать кодирование значения ключа (KVC). Это выглядело бы примерно так:

[[self valueForKey:[NSString stringWithFormat:@"label%d", i]] setText:[labelArray objectAtIndex:i]];

Дополнительную информацию можно найти здесь

person Elfred    schedule 03.08.2010
comment
Ewwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww. - person tc.; 03.08.2010