Установка текста UITextField в цикле? - PullRequest
1 голос
/ 24 февраля 2010

Можно ли установить текстовое поле для UITextField для нескольких объектов из цикла, используя setValue: forKey :? Я немного растерялся, если мне нужно как-то указать «текст» в имени свойства, или я что-то упускаю?

// INTERFACE
@property(nonatomic, retain) IBOutlet UITextField *textFieldBit_01;
@property(nonatomic, retain) IBOutlet UITextField *textFieldBit_02;
@property(nonatomic, retain) IBOutlet UITextField *textFieldBit_03;
@property(nonatomic, retain) IBOutlet UITextField *textFieldBit_04;
@property(nonatomic, retain) IBOutlet UITextField *textFieldBit_05;

.

// IMPLEMENT
@synthesize textFieldBit_01;
@synthesize textFieldBit_02;
@synthesize textFieldBit_03;
@synthesize textFieldBit_04;
@synthesize textFieldBit_05;

for(unsigned int counter=1; counter<=5; counter++) {
    NSString *propertyName = [[NSString alloc] initWithFormat:@"textFieldBit_%02d.text",counter];
    NSString *propertyValue = [[NSString alloc] initWithFormat:@"%d", counter];

    [self setValue:propertyValue forKey:propertyName];
    [propertyName release];
    [propertyValue release];
}

EDIT_001

Может быть, я должен попытаться уточнить свой вопрос немного: я, по сути, пытаюсь установить текст в одном из 5 полей UITextFields каждый раз вокруг цикла. Я мог бы использовать «если» или «переключатель», но это немного похоже на излишество. Я подумал, что setValue: forKey: позволит мне сделать это путем создания уникального ключа во время каждой итерации и использования одного вызова.

if(counter == 1) [textFieldBit_01 setText:@"%02d", 1];
if(counter == 2) [textFieldBit_02 setText:@"%02d", 2];
if(counter == 3) [textFieldBit_03 setText:@"%02d", 3];
if(counter == 4) [textFieldBit_04 setText:@"%02d", 4];
if(counter == 5) [textFieldBit_05 setText:@"%02d", 5];

EDIT_002

NSString *propertyName = [[NSString alloc] initWithFormat:@"labelBit_%02d.text",counter];
NSString *propertyValue = [[NSString alloc] initWithFormat:@"%d", geoTag];      
[self setValue:propertyValue forKeyPath:propertyName];

Спасибо за ответ, теперь я понимаю, где я ошибался, что я использовал, было setValue: forKey: когда в ситуации, когда мне нужно было получить доступ к «labelBit_01.text», я должен был использовать setValue: forKeyPath:

1017 * Гэри *

1 Ответ

2 голосов
/ 24 февраля 2010

Попробуйте

[self setValue:propertyValue forKeyPath:[propertyName stringByAppendingString:@".text"]];

То, что это дает вам в итоге:

self.textFieldBit_01.text = @"01";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...