2011-05-13 106 views
1

我的問題是,我有一個屏幕有很多UITextField和類,在UITextField中輸入的所有數據都存儲在我的xyz類中。現在我正在使用switch case將我的UITextField映射到類屬性,這非常可怕,更不用說驗證了,它增加了更多的複雜性。有沒有什麼辦法來映射類屬性與UITextField並擺脫開關的情況下,請幫助。將UITextField映射到類屬性

+0

你似乎在尋找'IBOutlet's – 2011-05-13 08:02:33

+0

無不是IBOutlets – 2011-05-13 08:25:31

+0

nielsbot已經得到了我的問題/問題吧 – 2011-05-13 08:26:11

回答

1

給每個文本字段一個從0到n的標籤。然後,您可以使用數組來查看標籤映射到 出口 屬性名稱,例如:

@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

+0

正確的基本問題在於將文本字段直接映射到屬性,並因此增加了對字符串數組的需求:(並且錯誤的索引可能會導致損壞 – 2011-05-13 08:29:05

+0

您可以添加:assert field.tag> 0 &&字段。標記<(sizeof(fieldNames)/ sizeof(fieldNames [0]))':-) – nielsbot 2011-05-13 17:26:27

+0

此外,在這種情況下,我將標記分配給本地變量,以避免調用field.tag 3x。 ('NSInteger tag = field.tag') – nielsbot 2011-05-13 17:27:01

1

你可以考慮一個採用UITextFieldDelegate協議並且包含一個字符串的類。

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

    ... // Other necessary ivars 
} 

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

這樣,您就可以把所有的代碼在這個對象。如果驗證方法每個文本字段都不相同,則可以將代碼作爲塊對象接受。

-(void)setValidationBlock:(ValidationBlock)block; 

在這裏,你將與XXBoundString對象替換NSString S和設置他們每個人是一個特殊的UITextField的委託。

相關問題