Objective C Быстрый доступ к перечислению vars - PullRequest
1 голос
/ 04 января 2012

Предположим, у меня есть 4 UITextFields (line1, line2, line3 и line4) в качестве ivars в классе My viewcontroller.Я хочу быстро перечислить массив, который состоит из 4 строк, а затем заполнить каждое из UITextFields строковыми данными из массива.Как бы я получить ссылку на каждое из полей UITextFields?Я знаю, что с KVC возможен один способ (см. Код), но есть ли другой способ добиться этого?

int i = 1;
for(NSString *string in array) {
    NSString *fieldName = [NSString stringWithFormat:@"line%@", i];
    UITextField *field = [self valueForKey:fieldName];
    field.text = string;
}

Ответы [ 4 ]

2 голосов
/ 04 января 2012

Вы можете установить атрибут тега в каждом UITextField и затем использовать метод тега - (UIView *) viewWithTag: (NSInteger).

1 голос
/ 04 января 2012

Вы можете поместить UITextfield в массив и сделать

UITextField *textField = nil;

[stringArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    textField = [textFieldArray objectAtIndex:idx];
    textField.text = obj;         
}];
1 голос
/ 04 января 2012

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

//Thanks @Tommy for the array suggestion
NSArray *arrayOfFields = [NSArray arrayWithObjects:textField1, textField2, textField3, textField4, nil];
for(NSString *string in array)
   [fields setValue:string  forKey:@"text"]; //<---Thanks @Paul.s

[fields release];
0 голосов
/ 04 января 2012

Если вы хотите, чтобы iOS 4 была основой вашей поддержки, теперь вы можете создавать коллекции непосредственно в конструкторе интерфейсов. Таким образом, вы объявите что-то вроде:

@property (nonatomic, retain) IBOutletCollection(UITextField)
            NSArray *textFieldCollection;

Затем вы можете подключить до 10000 * s, сколько захотите, и NSArray будет создан и заполнен для вас обычными механизмами загрузки NIB.

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