Проход по одноименным элементам управления - PullRequest
2 голосов
/ 23 июня 2009

У меня есть от view0 до view25. Я не хочу, чтобы у меня был переключатель на 25 корпусов, так есть ли способ сделать что-то подобное?

- (void)modifyViewNumber:(int)number
{
     [view*number* dosomething];
}

Ответы [ 9 ]

7 голосов
/ 23 июня 2009

Поместить представления в массив при запуске.

3 голосов
/ 23 июня 2009

Никто не предложил NSMatrix еще? Это похоже на то, для чего это сделано.

Предупреждение: все представления должны быть элементами управления, такими как текстовые поля или кнопки. В основном, посмотрите на его ссылку на класс и посмотрите, наследует ли он от NSControl в какой-то момент. Если он проходит этот тест, то NSMatrix является опцией. (Вот список всех классов AppKit , чтобы сделать это легко.)

Чтобы превратить элемент управления в матрицу в IB, создайте один из элементов управления обычным способом, а затем перетащите его ручку изменения размера. Сначала он ничего не сделает, но продолжайте тянуть. Вместо изменения размера, ваш контроль будет расти; теперь это матрица ячеек вместо одного элемента управления.

3 голосов
/ 23 июня 2009

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

- (id)viewWithTag:(NSInteger)aTag
1 голос
/ 23 июня 2009

Многие люди говорят, что используют массив - я делаю это все время, это действительно единственный способ использовать конструктор интерфейса, но я хотел бы добавить немного.

Иногда получение значений в массив может быть сложным. Обычно есть способ получить массив всех элементов управления на экране. обычно я беру это и перебираю, ища тип элемента управления с определенным шаблоном именования и собираю его в свой собственный массив.

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

1 голос
/ 23 июня 2009

Почему бы вам не поместить представления в массив и не получить ссылки на них, используя индекс массива?

- (void)modifyViewNumber:(int)number
{
    UIView* view = [views objectAtIndex:number];
    [view dosomething];
}
0 голосов
/ 01 января 2012

Предполагается, что Интерфейсный Разработчик (в противном случае просто, как и раньше) Это лучшее, что я мог сделать:

В .ч: ​​

{
    UILabel         *banner[NUM_BANNERS];
}
@property (nonatomic, retain) IBOutlet UILabel *banner0;
@property (nonatomic, retain) IBOutlet UILabel *banner1;
@property (nonatomic, retain) IBOutlet UILabel *banner2;
etc.

В .м:

- (void)viewDidLoad
{
    banner[0] = banner0;
    banner[1] = banner1;
    banner[2] = banner2;
    etc.

Затем можно получить доступ по индексу массива. Не забудьте выпустить.

0 голосов
/ 23 июня 2009

Либо используйте коллекцию, либо Отражение .

0 голосов
/ 23 июня 2009

Я полагаю, вы используете Interface Builder для настройки этих представлений?

Возможно, кому-то придется поправить меня, но я считаю, что вы можете создать в своем классе выход NSArray Interface Builder, а затем назначить ему все свои представления. Например, вы можете объявить "IBOutlet NSArray * views;" в заголовочном файле, а затем используйте привязки построителя интерфейса, чтобы связать все 25 представлений с этим свойством. Они будут автоматически добавлены в массив, а затем вы можете чисто перебрать его в своем коде.

0 голосов
/ 23 июня 2009

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

Если числа не последовательные, используйте хеш-таблицу.

Отражение может быть вариантом, но может быть медленнее (я не гуру Objective C, даже не знаю, практично ли это).

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