将UITextField映射到类属性

时间:2011-05-13 07:55:15

标签: iphone objective-c uitextfield nsobject

我的问题是我有一个包含大量UITextField和类的屏幕,其中在UITextField中输入的所有数据都存储在我的xyz类中。现在我正在使用switch case将我的UITextField映射到类属性,这非常可怕,更不用说验证会增加它的复杂性。有没有办法用UITextField映射类属性并摆脱切换案例,请帮忙。

2 个答案:

答案 0 :(得分:1)

为每个文本字段指定一个从0到n的标记。然后,您可以使用数组将视图标记映射到 outlet 属性名称,例如:

@interface MyClass

@property ( nonatomic, retain ) id property1 ;
@property ( nonatomic, retain ) id property2 ;
@property ( nonatomic, retain ) id property3 ;

@end

然后在-(void)textFieldDidChangeText:(NSNotification*)note(或处理文字字段更改的任何地方)方法执行此操作:

static NSString * fieldNames[] = { @"property1", @"property2", @"property3" } ;
UITextField * field = [ note object ] ;
[ self setValue:field.text forKey:fieldNames[ field.tag ] ] ;

也许其他人可以使用更加可靠的解决方案。 HTH

答案 1 :(得分:1)

您可以考虑使用UITextFieldDelegate协议并包含字符串的类。

@interface XXBoundString: NSObject <UITextFieldDelegate> {
    NSString *string;

    ... // Other necessary ivars
}

... // string methods that you want exposed
@end

这样您就可以将所有代码放在此对象中。如果验证方法因文本字段而异,则可以将代码作为块对象接受。

-(void)setValidationBlock:(ValidationBlock)block;

在这里,您将NSString替换为XXBoundString个对象,并将它们中的每一个设置为特定UITextField的委托。