如何从动态生成的 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】:

实现&lt; UITextFieldDelegate &gt;。让自己成为txtField 的代表。设置txtFieldtag。然后,当您收到对 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 获取文本(禁用用户交互)?

无法从 localStorage 检索动态生成的内容

如何将动态输入值添加到本地状态以进行检索

iPhone:如何在自定义单元的动态数量上管理 UITextfield 委托方法

从 Firebase 动态链接中检索 UTMParameters