Динамическое именование / ссылки на переменные Objective-C во время выполнения - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть вопрос со ссылкой на имя переменной для гуру Objective C.

Допустим, у меня есть 6 UILabels на форме, они настроены со свойствами с именем myLabel1 - myLabel6

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

Вот то, что я хотел быdo:

for (int LP = 0; i <5)
{

    labelLP.text = [NSString stringWithFormat:@"My label number:%d", LP};
}

В чем я не уверен, так это в том, как ссылаться на метку, добавлять LP int и использовать его в моем цикле.Я уверен, что есть способ сделать это, просто не знаю, как .. Кто-нибудь ??

Ответы [ 3 ]

5 голосов
/ 06 декабря 2011

вы всегда можете воспользоваться динамическим временем выполнения target-c:

id var = object_getIvar(self,class_getInstanceVariable([self class], [[NSString stringWithFormat:@"label%d",LP] UTF8String]));

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

2 голосов
/ 06 декабря 2011

Нравится ли этот подход - вопрос стиля, но вот способ, который должен работать:

for (int LP = 1; i <=6)
{
    NSString *labelName = [NSString stringWithFormat: @"label%d", i];
    UILabel *labelLP = (UILabel*)[self valueForKey: labelName];
    labelLP.text = [NSString stringWithFormat:@"My label number:%d", LP};
}
1 голос
/ 06 декабря 2011

Я не думаю, что вы можете создавать имена переменных на лету, по крайней мере, не тривиально.

Вы всегда можете использовать корпус переключателя внутри цикла:

for (int i=0; i<5; i++) {

    switch(i) {

        case 1:
            myLabel1.text = [NSString stringWithFormat:@"My label number: %d", i];
            break;
        case 2:
            myLabel2.text = [NSString stringWithFormat:@"My label number: %d", i];
            break;
        ...
        ...
    }
}

Вы также можете хранить свои метки в массиве и циклически проходить по этому массиву.

Важно не зацикливаться на именах переменных, а думать о том, зачем вам нужны ваши объекты и как их получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...