如何在不触摸或点击文本字段的情况下从动态创建的 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
可以具有name
、quantity
、squareFootPerUnit
、estCost
、totalSquareFoot
和totalCost
等属性。
然后,我将创建一个 UITableViewCell,其中包含三个可编辑的 UITextField(quantity
、estCost
、squareFootPerUnit
)和三个标签(name
、totalSquareFoot
和 totalCost
)。使您的 UITableViewCell
符合 UITextFieldDelegate
以捕获来自用户的输入。
在tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
中,使用来自Item
对象的数据填充UITableViewCells
。从UITextFields
捕获quantity
、estCost
、squareFootPerUnit
数据后,进行计算并将答案分配给Item
对象中的totalSquareFoot
和totalCost
属性并重新加载表.
有多种方法可以将计算值分配给Item
对象。我通常使用的方法是将闭包(Swift)/块(Objective-C)作为UITableViewCell
上的属性,然后在计算完成时调用它。将计算得到的答案作为参数传递。
UITableView 优势
-
如果服务器返回多个
Item
数据,则无需处理任何复杂的 x 和 y 坐标定位。
使用对象更容易维护您的Item
数据。
无需在视图上使用tag
对象或保留tag
名称。
【讨论】:
以上是关于如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用按钮或 tbody 的情况下从动态生成的表中单击一行来获取 HTML 表中单元格的值
如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)
如何在不安装的情况下从 apt-get 下载软件包? [关闭]