如何创建一组具有独立变量的文本字段,这些变量在SwiftUI中进行编辑



我正在创建一个简单的程序,它可以创建几个文本字段进行编辑。我使用以下代码来创建它们:

ForEach((1...textfields).reversed(), id: .self){ _ in
TextField("Type here:", text: $text)
}

textfields变量由代码前面的几个按钮控制,但真正的问题是";文本";变量按钮添加和删除文本字段,但编辑一个会编辑所有文本字段,这不是我想要的。所以我的问题是,如何创建包含唯一变量但仍然可以由ForEach(或类似的(循环生成的文本字段?

问题

这里的任务是为TextField的值组织某种存储。

解决方案

步骤1

可以使用@State@Binding修饰符来组织存储。由于我们需要有多个TextField,因此StringArray可能是存储类型的不错选择。这可以写成:

@State var values = ["1", "2", "3", "4", "5"]

请注意,我们在这里提供的初始值为空字符串。这只是为了举例说明。如果需要指定父视图中的值,可以使用所需的任何内容,也可以将@State替换为@Binding

请注意,[String]类型将由swift自动推断。

步骤2

然后,需要在视图的主体实现中将这些值转换为TextFields。为此,我们对您的ForEach进行了一点修改:

// iterating through the indices of the values
ForEach(values.indices, id: .self) { index in    
// using index to create binding to the value
TextField("Type here:", text: $values[index])
}

结果

这是我们的最终结果:

struct MultipleTextViews: View {
@State var values: [String] = ["1", "2", "3", "4", "5"]
var body: some View {
ForEach(values.indices, id: .self) { index in
TextField("Type here:", text: $values[index])
}
}
}

最新更新