2013-06-23 4 views
1

Если у меня есть 100 UITextFields,Выполняйте те же действия для многих объектов

myTextfFeld1, myTextField2 ... и так далее, пока mytextField100

... и все они выполняют те же действия, скажем, изменение myTextField1.alpha = 0.4 в myTextField1.alpha = 1 ,

Вместо того, чтобы писать на это в 100 раз есть более эффективный способ сделать это

Я посмотрел здесь iOS looping over an object's properties and adding actions, но это все еще означает, добавляя все UITextFields в массив.

+4

Почему бы вам не создать их в массиве для начала? – Kevin

+0

Наличие 100 иваров глупо. Используйте NSArray или IBOutletCollection. – rmaddy

+0

У меня нет 100 иваров, просто преувеличение во время моего объяснения того, что я связываю, чтобы передать в моем вопросе. Согласился с обоими комментариями – JSA986

ответ

6

Пожалуйста, нет!

Like this.

Используйте массив, серьезно. Не смей иметь 100 переменных экземпляра с именем textField1 до textField100!


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

for (int i = 1; i <= 100; i++) { 
    NSString *ivarName = [NSString stringWithFormat:@"myTextField%d", i]; 
    UITextField *tf = [self valueForKey:ivarName]; 
    [tf doWhateverYouWant]; 
} 

Отражение в Objective-C является удивительным, не так ли? Не совсем, когда злоупотребляют.

+0

Я бы с мечтой об этом был просто пример текста для SO – JSA986

+0

@ JSA986 Извините, я не понимаю, что вы имеете в виду, пожалуйста, уточните. –

+0

На самом деле у меня бы не было 100 переменных экземпляра с именем 'myText1'etc. Они были гипотетической переменной экземпляра для простоты при отправке моего вопроса. У них гораздо лучшие соглашения об именах, чем это ;-) Спасибо за ответ, который был именно после этого! – JSA986

1

Вы можете определить коллекцию розетки и подключить все TextFields к нему с XIB:

@property (nonatomic, weak) IBOutletCollection(UITextField) NSArray *textFields; 

Затем вы можете цикл над textFields массива.

+0

... или вместо цикла вы можете использовать метод '-makeObjectsPerformSelector: withObject:' в 'NSArray'. – holex

+1

@holex, true, предполагая, что метод принимает параметр объекта (поэтому не может использоваться для установки «alpha», например) – Wain

+0

yep, вы абсолютно правы, ему нужно немного поиграть с 'NSInvocation' для параметры без объекта. это зависит от кода, который выбрал плакат, но это не было частью первоначального вопроса. – holex

-2

Используйте петлю и массив для текстовых полей. , например.

int i = 0 
do textfield[i].alpha = 1 
i = i+1 
until i = 100 
+0

Вопрос помечен Objective-C. Ответы должны быть на одном языке. – rmaddy

+0

Так что мне не разрешают отвечать на людей в псевдокоде? – user2369405

+0

Вы разрешены? Конечно.Но чтобы быть полезным, ваш ответ должен предоставить полезный код, соответствующий этому вопросу. – rmaddy

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