如何从动态生成的 UITextField 中检索数据?
Posted
技术标签:
【中文标题】如何从动态生成的 UITextField 中检索数据?【英文标题】:How to retrieve data from dynamically generated UITextField s? 【发布时间】:2013-06-04 18:27:08 【问题描述】:我正在开发一个应用程序,它需要根据服务器返回的数据动态生成 UI 组件。 我通过在代码中动态生成UILabels、UITextFields、UIPickerViews等来实现动态布局 例如:
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 作为一种选择,但我想尽职尽责并检查是否有更直接的方法来实现这一目标。
谢谢, 网络视频
【问题讨论】:
您真的是要创建具有完全相同框架的多个文本字段吗? 【参考方案1】:实现< UITextFieldDelegate >
。让自己成为txtField
的代表。设置txtField
的tag
。然后,当您收到对 textFieldDidEndEditing:
或 textField:shouldChangeCharactersInRange:replacementString:
的回调时,您可以知道哪个文本字段已更改并对其进行处理。
【讨论】:
我相信您应该能够使用@Wain 建议的textFieldDidEndEditing:
方法“将文本字段映射到模型对象中的变量”。然后,每当您需要使用文本字段中的内容时,请查看您在模型中映射到的内容。至少我很确定这是做到这一点的最佳实践方式。【参考方案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];
【讨论】:
【参考方案3】:如果它是动态生成的,则给每个 textField 一个唯一的标签,然后使用它从中获取值。
UITextField *textField = [self.view viewWithTag:uniqueTag];
【讨论】:
以上是关于如何从动态生成的 UITextField 中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]
如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?