如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?
Posted
技术标签:
【中文标题】如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?【英文标题】:How do I create a group of textfields that have separate variables that they edit in SwiftUI? 【发布时间】:2020-11-26 23:42:40 【问题描述】:我正在创建一个简单的程序,该程序会创建几个文本字段以供编辑。我使用以下代码来创建它们:
ForEach((1...textfields).reversed(), id: \.self) _ in
TextField("Type here:", text: $text)
textfields
变量由代码前面的几个按钮控制,但真正的问题是“文本”变量。这些按钮添加和删除文本字段,但编辑一个会编辑它们,这不是我想要的。所以我的问题是,如何创建包含唯一变量但仍可以从 ForEach
(或类似)循环中创建的文本字段?
【问题讨论】:
请提供更多代码以便能够更轻松地重现此问题 【参考方案1】:问题
这里的任务是为TextField
s 值组织某种存储。
解决方案
步骤 1
可以使用@State
或@Binding
修饰符来组织存储。因为我们这里需要有多个TextField
s,所以String
s 中的Array
可能是存储类型的不错选择。可以这样写:
@State var values = ["1", "2", "3", "4", "5"]
请注意,我们在此处将初始值提供为空字符串。仅用于示例目的。如果您需要从父视图中指定值,您可以使用任何您想要的或将@State
替换为@Binding
。
注意[String]
类型会被swift自动推断出来。
第二步
然后,需要在视图的主体实现中将这些值转换为TextField
s。为此,我们稍微修改您的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])
【讨论】:
以上是关于如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?的主要内容,如果未能解决你的问题,请参考以下文章