如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?

Posted

技术标签:

【中文标题】如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?【英文标题】:How to get text from dynamically created UITextField without touching or tapping the text field (disabled user interaction)? 【发布时间】:2018-07-03 13:43:44 【问题描述】:

在我的应用程序中,我根据服务器响应在 for 循环中动态创建了文本字段,我设计了它的每一行都有五个文本字段。在这里,我将 textfield1 值和 textfield2 值相乘,然后显示在 textfield4 中,然后将 textfield1 和 textfield3 相乘,然后显示在 textfield5 中,所以在这里我禁用了基于占位符文本的 textfield4 和 textfield5 的用户交互,因为我只想显示该文本字段的值和制作不可编辑的字段。

这里我附上了这个功能的空白字段截图:

这里我附上了填写一些值后的截图:

这里我的问题是由于禁用用户交互而无法获取 textfield4 和 textfield5 值。如果我启用用户交互意味着我能够在 textFieldShouldEndEditing 中获取两个文本字段值。

如何获取textfield4和textfield5的值?

【问题讨论】:

【参考方案1】:

您可以为textfield 设置标签并使用该标签获取textfield。请参考以下示例代码。

if let txtField = self.view.viewWithTag(123) as? UITextField 
    print("txtField.text")

【讨论】:

那么如何获取特定文本字段的“ID”? 那么如何获取特定文本字段的“ID”兄弟? 你应该在创建 UITextField 时设置【参考方案2】:

对我来说,最简单的解决方案是在设置 textfield4 和 5 文本的同时使用计算的文本字段值设置一个 var。如果您希望获得通知,您可以为其值添加一个观察者。

【讨论】:

【参考方案3】:

一个更好的方法可能是将所有内容放在由一组对象填充的UITableView 中,我们将这个对象命名为Item。每个Item 可以具有namequantitysquareFootPerUnitestCosttotalSquareFoottotalCost 等属性。

然后,我将创建一个 UITableViewCell,其中包含三个可编辑的 UITextField(quantityestCostsquareFootPerUnit)和三个标签(nametotalSquareFoottotalCost)。使您的 UITableViewCell 符合 UITextFieldDelegate 以捕获来自用户的输入。

tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中,使用来自Item 对象的数据填充UITableViewCells。从UITextFields 捕获quantityestCostsquareFootPerUnit 数据后,进行计算并将答案分配给Item 对象中的totalSquareFoottotalCost 属性并重新加载表.

有多种方法可以将计算值分配给Item 对象。我通常使用的方法是将闭包(Swift)/块(Objective-C)作为UITableViewCell 上的属性,然后在计算完成时调用它。将计算得到的答案作为参数传递。

UITableView 优势

    如果服务器返回多个Item 数据,则无需处理任何复杂的 x 和 y 坐标定位。 使用对象更容易维护您的Item 数据。 无需在视图上使用tag 对象或保留tag 名称。

【讨论】:

以上是关于如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用按钮或 tbody 的情况下从动态生成的表中单击一行来获取 HTML 表中单元格的值

如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)

Android:如何在不拍照的情况下从相机捕获文本?

如何在不安装的情况下从 apt-get 下载软件包? [关闭]

如何在不点击的情况下从 Chrome 自定义标签中捕获 URL?

在不触摸自动增量 ID 字段的情况下选择