Цикл по одноименным элементам пользовательского интерфейса - возможно, получая переменную из ее имени? - PullRequest
0 голосов
/ 20 февраля 2012

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

Есть ли лучший способ установить метки, чем использовать этот код:

lblTotal1.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[1])];
lblTotal2.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[2])];
lblTotal3.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[3])];
lblTotal4.text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[4])];

Я хотел бы сделать что-то вроде этого:

for (int i = 1; i<5; i++) {
    lblTotal[i].text = [NSString stringWithFormat: @"%i Seconds", (int) round(fTimeTotal[i])];
}

Но я должен иметь возможность получить переменную из ее имени. Как я могу это сделать?

Ответы [ 3 ]

6 голосов
/ 20 февраля 2012

Вы можете соединить наши IBOutlets вместе в IBOutletCollection в IB (выберите группу и перетащите их в исходный код вместе; она должна предложить создать коллекцию).Хотя IBOutletCollection технически является упорядоченным списком (массивом), он фактически упорядочен случайным образом.

После того, как вы подключили все свои IBOutlets вместе в IBOutletCollection, вам все равно нужно будет знать, что именно.Вы делаете это с tag, которое является одним из полей, которые вы можете установить в IB.После того, как вы пометили их все, ваш код будет:

for (UILabel *label in self.labelCollection) {
  int value = (int)roundf(fTimeTotal[label.tag]);
  label.text = [NSString stringWithFormat:@"%i Seconds", value];
}
2 голосов
/ 20 февраля 2012

Если ваши переменные, такие как lblTotal1, являются свойствами, вы можете использовать кодирование значения ключа (KVC) для их получения:

NSUInteger lblIndex = 1;
NSString *lblName = @[NSString stringWithFormat: @"lblTotal%d", lblIndex];

id label = [self valueForKey: lblName];

В зависимости от того, ориентируетесь ли вы на iOS или OS X, id в последней строке может быть любой конкретный класс для вашего ярлыка, конечно.

0 голосов
/ 20 февраля 2012

Вы можете использовать массив self.view.subviews, чтобы пройти через все подпредставления и проверить, является ли это UILabel, делайте свои вещи.

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