2013-06-04 23 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];