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

How to add form groups dynamically on button click in SwiftUI?

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

我创建了一个字典数组来保存这 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"])
                }

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

如何让它工作? 谢谢!

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"] = [=10=]}))
TextField("After value", text: Binding(get: {(record[0]["after"] ?? "")}, set: {record[0]["after"] = [=10=]}))


如果你还想用 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"] = [=11=]}), formatter: NumberFormatter())