【问题标题】:UITextField Table View Cells - iOSUITextField 表格视图单元格 - iOS
【发布时间】:2015-03-07 04:42:05
【问题描述】:

我有一个代码设计问题要问大家。

我必须构建一个动态表单,这意味着表单不能保证每次加载时都包含相同的字段。

我得到了每个表单必须包含的字段列表,它们都是文本输入。我给出的列表是描述每个字段具有的基本 JSON 属性(即名称、isRequired、maxLength、minLength)。

我使用 UITableViewCell 和 UITextField 来创建表单。 为了验证和提交表单,我需要保持对每个单元格或每个单元格的文本字段的强引用,以便我可以获取为每个字段输入的数据。

如何在保持对每个单元格(或文本字段)的强引用的同时动态创建表单?

我很乐意回答您的任何澄清问题。

【问题讨论】:

  • 不,您不需要保持对单元格或文本字段的强引用,事实上,您不应该这样做。输入的数据应该存储在某种数据结构中,可以从文本字段的 didFinishEditing 委托方法更新。

标签: ios objective-c forms uitableview uitextfield


【解决方案1】:

我不会这样做。
当表格滚动时会发生什么? 您确实需要一个表格反映的模型对象,将表格用作模型是不明智的。声明一个 NSMutableDictionary 或数组或其他类型的属性,使用它来存储您的数据并在每次修改 textField 时更新它

【讨论】:

    【解决方案2】:

    与其保持对单元格的强引用,不如保持对代表单元格的模型的强引用。对于每行都是文本字段的表,模型是字符串数组。通过循环遍历 JSON 为 JSON 描述的每个表单元素添加一个字符串来构建它。

    那么你的表数据源就是那个字符串数组。随着文本字段的文本更改,更新相应的字符串(从文本字段到数组中的正确索引有点棘手,但它经常在 SO 上讨论。我最喜欢的方法是@danh solution here,它可以应用于单元格的任何子视图)。

    【讨论】:

    • 你是说每次在文本字段中输入字符时我都应该更新表格视图单元格吗?这似乎有点密集。
    • 好吧,我觉得发布最后一条评论有点愚蠢。我现在明白了,我只是在更新模型中的字符串并使用模型来跟踪文本字段中的值。这就是模型的用途。哈哈,谢谢兄弟。
    • 很高兴它有帮助。查看 uitextfield 的委托协议。您可以在文本更改或完成编辑(失去第一响应者)时获得更新。
    【解决方案3】:

    您将选择 动态 tableView 而不是 静态

    如您所见,ios sdk 完全是关于MVC 模式。

    您将以相同的方式分离您的关注点,使用类模型来描述您的数据。

    我最大的建议是你根本不应该依赖单元格,因为它们会被重复使用。所以不要把你的逻辑和接口组件混在一起。

    【讨论】: