Objective-C快速枚举访问实例变量

时间:2012-01-04 15:52:40

标签: objective-c variables enumeration

假设我在Viewcontroller类中有4个UITextFields(line1,line2,line3和line4)作为ivars。我想快速枚举一个由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 个答案:

答案 0 :(得分:2)

您可以在每个UITextField上设置tag属性,然后使用 - (UIView *)viewWithTag:(NSInteger)标记方法。

答案 1 :(得分:1)

关键是将您的文本字段添加到数组。现在您已经获得了对所有这些的引用,您可以将它们的所有值设置为您想要的任何值:

//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];

答案 2 :(得分:1)

您可以将UITextfield放在数组中并执行

UITextField *textField = nil;

[stringArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    textField = [textFieldArray objectAtIndex:idx];
    textField.text = obj;         
}];

答案 3 :(得分:0)

假设您愿意将iOS 4作为支持的底线,您现在可以直接在界面设计器中构建集合。所以你要声明如下:

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

然后,您可以根据需要将其连接到尽可能多的UITextField,并且将通过正常的NIB加载机制为您创建和填充NSArray