Заполните текст UILabel без ссылки на IBOutlet - PullRequest
2 голосов
/ 24 июня 2010

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

Теперь я делаю это, соединяя каждую метку с IBOutlet и заполняя текст программно постоянной строкой, определенной в файле констант.

Я хочу избежать соединения с IBOutlet, чтобы я мог связать нужный строковый токен в IB.

Могу ли я сделать это? Может быть, с локализацией (ibtool) только с одним языком?

Ответы [ 3 ]

4 голосов
/ 24 июня 2010

Полагаю, вы могли бы создать подкласс UILabel:

@interface MyLabel : UILabel {
}

@end

@implementation MyLabel

- (void) awakeFromNib {
    self.text = @"MyText"; // load text from your constants file here
}

@end

и установить класс в MyLabel в IB.Если у вас есть несколько строк, которые вы хотите использовать для нескольких меток, вы можете расширить это, используя теги IB и проверяя их в awakeFromNib (сопоставляя их с ключом в вашем файле констант).

1 голос
/ 24 июля 2010

Один из подходов может понравиться так:

  1. Создание всех компонентов пользовательского интерфейса в IB.
  2. Определите правильный (уникальный) тег для каждого элемента управления, который у вас есть.
  3. В приложении перейдите к представлению содержимого (которое является представлением ужина для всех элементов управления) в вашем окне и получите все вспомогательные представления (массив вложенных представлений является элементами управления).
  4. Напишите логику для управления всеми элементами управления с определенным тегом, который вы получите.
  5. Выполнить соответствующую операцию управления.

Даже если у вас другой Nib или View, повторите этот подход, чтобы получить детали

0 голосов
/ 27 июля 2010

Предполагая, что все они находятся в одном и том же файле NIB, вы можете перебирать содержимое NIB в поисках экземпляров UILabel, а затем назначать текст присутствующим меткам. Для более точного контроля используйте теги Interface Builder и назначьте номер меткам, которые вы хотите изменить.

NSString *myStr = @"Bob";
NSArray *contents = [[NSBundle mainBundle] loadNibNamed:@"NameOfViewNib" owner:self options:NULL];

for(id nibItem in contents) {
    if ([nibItem isKindOfClass:[UILabel class]]) {
        UILabel *lbl = (UILabel*)nibItem;

        /* Optionally check for a particular tag if you want to filter them */
        if (lbl.tag == 1) {
            lbl.text = myStr;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...