2012-04-07 4 views
1

Я пишу приложение iOS, и у меня есть один вопрос, чтобы облегчить чтение.Применить несколько свойств к нескольким объектам

Например, у меня есть много вещей, чтобы скрыть, поэтому я делаю это вот так: mytext1.hidden = YES; mytext2.hidden = YES; mytext3.hidden = YES; ...

Есть ли способ написать это: (mytext1, mytext2, mytext3) .hidden = YES;

?

Благодаря

ответ

2

Вы можете перебирать массив с селектором, как это:

[theArray makeObjectsPerformSelector:@selector(methodName)]; 

... и есть вариация, которая принимает один параметр объекта. Это не будет обрабатывать скалярные типы, хотя, так, чтобы установить скрытые = YES, можно перечислить с помощью блока:

[theArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    (UITextField *)obj.hidden = YES; 
}]; 

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

[myArrayOfControls hidden:YES]; 

Легко на глазах, не так ли? Вы можете добиться этого, создав свою собственную специальную категорию методов NSArray:

// in Array+UIControlEnumeration.m 

@implementation NSArray (UIControlEnumeration) 

- (void)hidden:(BOOL)hidden { 

    for (UIControl *control in self) { 
     control.hidden = hidden; 
    } 
} 
+0

Отлично! Мне это нравится ! Благодаря ! –

1

Нет, синтаксис как и не существует в Objective-C. Вы бы лучше придерживаться их в массив, который вы добавляете в качестве синтезированной собственности и перекручивание через них так:

for (UITextField *textField in self.myArrayOfTextFields) { 
    [textField setHidden:YES]; 
} 
+0

@ Ответ danh намного подробнее :) –

Смежные вопросы