微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 SwiftUI 中单击按钮时动态添加表单组?

如何解决如何在 SwiftUI 中单击按钮时动态添加表单组?

我想制作一个表单,需要在单击按钮时动态添加更多字段。 每次点击时,我都会附加 2 个字段(一组)。 到目前为止我已经尝试过:

我创建了一个字典数组,用于保存这两个字段(组)的值。

看起来像这样。

@State var record = [["before": 300,"after": 280],["before": 300,"after": 260]]

然后我有一个按钮,点击(递增计数器)我在上面的数组中附加一个字典,这样它应该添加一个新的表单组(2个字段)

这是我的观点,我使用 forEach 来循环和渲染项目。

ForEach(0..<counter,id: \.self) { index in
                    TextField("Before value",text: $record[index]["before"])
                    TextField("After value",text: $record[index]["after"])
                }

但是这样做会出现以下错误

enter image description here

我如何让它工作? 谢谢!

解决方法

TextField 必须需要 String 绑定,并且在您的代码中,您使用的是 Int。因此,首先需要将字典声明为 [String: String] 类型,然后使用自定义绑定。像这样。

@State var record = [["before": "300","after": "280"],["before": "300","after": "260"]]

TextField("Before value",text: Binding(get: {(record[0]["before"] ?? "")},set: {record[0]["before"] = $0}))
TextField("After value",text: Binding(get: {(record[0]["after"] ?? "")},set: {record[0]["after"] = $0}))


如果你仍然想使用 Int 那么你可以使用它。

@State var record = [["before": 300,"after": 280],["before": 300,"after": 260]]

TextField("Before value",value: Binding(get: {(record[0]["before"])},set: {record[0]["before"] = $0}),formatter: NumberFormatter())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。