【问题标题】:How to retrieve data from dynamically generated UITextField s?如何从动态生成的 UITextField 中检索数据?
【发布时间】: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 作为一种选择,但我想尽职尽责并检查是否有更直接的方法来实现这一目标。

谢谢, 网络视频

【问题讨论】:

  • 您真的是要创建具有完全相同框架的多个文本字段吗?

标签: ios objective-c dynamic views


【解决方案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];
    

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多