【问题标题】:How do I create a group of textfields that have separate variables that they edit in SwiftUI?如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?
【发布时间】:2020-11-26 23:42:40
【问题描述】:

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

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

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

【问题讨论】:

  • 请提供更多代码以便能够更轻松地重现此问题

标签: swift variables foreach swiftui


【解决方案1】:

问题

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

解决方案

步骤 1

可以使用@State@Binding 修饰符来组织存储。因为我们这里需要有多个TextFields,所以Strings 中的Array 可能是存储类型的不错选择。可以这样写:

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

请注意,我们在此处将初始值提供为空字符串。仅用于示例目的。如果您需要从父视图中指定值,您可以使用任何您想要的或将@State 替换为@Binding

注意[String]类型会被swift自动推断出来。

第二步

然后,需要在视图的主体实现中将这些值转换为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])
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多