2013-06-04 46 views
0

我正在開發一個應用程序,它需要基於從服務器返回的數據動態生成UI組件。 我通過生成動態代碼 例如UILabels,UITextFields,UIPickerViews等實現動態佈局:如何從動態生成的UITextField中檢索數據?

for(int i=0; i < count; i++) 
{ 
    UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 30)]; 
    txtField.placeholder = [@"Test Input" ]; 

    [self.view addSubview:txtField]; 
} 

現在,我的問題是,我如何獲取用戶在文本字段中輸入的輸入。因爲,我沒有辦法將這個文本字段映射到我的模型對象中的一個變量。 我正在考慮將KVO作爲一種選擇,但我想盡我所能進行盡職調查,並檢查是否有更直接的方法來實現這一點。

謝謝 cybervedaa

+4

你真的想要創建具有完全相同幀的多個文本字段嗎? –

回答

2

實施<UITextFieldDelegate>。讓自己成爲txtField的代表。設置txtFieldtag。然後,當您收到textFieldDidEndEditing:textField:shouldChangeCharactersInRange:replacementString:的回叫時,您可以確定哪些文本字段已更改並對此做了一些處理。

+0

我相信你應該能夠使用@Wain建議的'textFieldDidEndEditing:'方法「將文本字段映射到模型對象中的變量」。然後,無論何時您需要使用文本字段中的內容,請查看您在模型中映射的內容。至少我很確定這是最好的做法。 – GeneralMike

0

如果它是動態生成的給每個文本框一個獨特的標記,然後用它來讀取它的值。

UITextField *textField = [self.view viewWithTag:uniqueTag]; 
2

要引用您需要以某種方式引用它們的視圖。例如,在使用界面構建器時,通過IBOutlet指定的類的屬性引用視圖。由於您在循環中創建這些視圖,我建議您使用viewWithTag:來標記每個視圖並檢索它們。要小心其他默認標籤爲0的視圖,以增加索引以保持唯一值。

for(int i=0; i < count; i++) 
{ 
    UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 300, 30)]; 
    txtField.placeholder = [@"Test Input" ]; 
    txtField.tag = i + 1; 

    [self.view addSubview:txtField]; 
} 

//To retrieve elsewhere 
UITextField *txtField = [self.view viewWithTag:index];