2012-02-13 2 views
0

у меня есть ряд UIButton с и я устанавливающих специальный шрифт на них программно, например:Перебор объектов в Objective-C

Button1.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
Button2.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
Button3.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
Button4.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
Button5.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
Button6.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 

Этот код является правильным, и это работает, но это Безразлично Кажется, это самый простой способ написать это. Есть ли способ перебрать эти элементы?

я себе что-то вроде этого:

for (int i = 1; i <= 5; i++) { 
    Button(i).titleLabel.font = etc.. // How would I get the value of 'i'? 
} 

Или это просто плохая идея?

+0

Являются ли кнопки в массиве? Или отдельные случаи? – Ilanchezhian

+0

, как часто вам это нужно (в каком количестве разных мест)? Вы можете добавить их в NSdictionary и цикл, чтобы вытащить их обратно и изменить свойства, но вряд ли стоит заменить 6 строк кода. – AnthonyBlake

+0

Было бы разумно пройти через это, если кнопки находятся в известном порядке в какой-то коллекции – nduplessis

ответ

5

Вы можете использовать NSArray перебрать:

UIFont *font = [UIFont fontWithName:@"myCustomFont" size:16]; 
NSArray *buttons = [NSArray arrayWithObjects: Button1, Button2, Button3, 
               Button4, Button5, Button6, 
               nil]; 
for (UIButton *button in buttons) { 
    button.titleLabel.font = font; 
} 
+0

Это действительно опрятно. Жаль, что я могу выбрать только один ответ как правильный! Я выбираю твое, потому что кажется, что ты первый. –

+0

Просто запомните _не забыть_ 'nil' как последний аргумент' [NSArray arrayWithObjects:] ', чтобы избежать неопределенного поведения. Это так называемый список вариационных аргументов, для которого требуется «nil», чтобы определить, что аргументов больше нет. – Tharabas

1

Ну, я думаю, вы можете поместить все ваши кнопки в массиве, а затем быстро перечислить через него.


NSArray *buttons; 
//Put all of your buttons inhere 
for (UIButton *button in buttons) 
{ 
    button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
} 
 
2

вы можете сделать так:

NSMutableArray *buttons = [NSMutableArray array]; 
[buttons addObject: Button1]; 
[buttons addObject: Button2]; 
[buttons addObject: Button3]; 
[buttons addObject: Button4]; 
[buttons addObject: Button5]; 
[buttons addObject: Button6]; 

for (UIButton *button in buttons) { 
    button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
} 

или

for (int i=1;i<7;i++) { 
    SEL selector = selectorFromString([NSString stringWithFormat:@"Button%d", i]); 
    UIButton *button = [self performSelector:selector]; 
    button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
} 
+1

Вы не можете добавить объект в 'NSArray', поскольку он является неизменным (его нельзя изменить после init). Но вы можете использовать 'NSMutableArray' для достижения этого. – Tharabas

0

Как насчет этого? currentView - это UIView, в котором есть все кнопки.

NSArray* buttonsArray = currentView.subviews; 

for((UIButton*) button in buttonsArray) 
{ 
    button.titleLabel.font = [UIFont fontWithName:@"myCustomFont" size:16]; 
} 
Смежные вопросы