2010-02-24 4 views
1

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

// 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 каждый раз вокруг петли. Я мог бы использовать «if» или «switch», но это немного похоже на overkill. Я думал, может быть, 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:

Гэри

ответ

2

Попробуйте

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

Что это заканчивается тем, что дал вам это:

self.textFieldBit_01.text = @"01"; 
+0

Большое спасибо, SetValue: forKeyPath: вместо SetValue: forKey: :) – fuzzygoat

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