首页 > 解决方案 > 如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?

问题描述

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

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

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

标签: swiftvariablesforeachswiftui

解决方案


问题

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

解决方案

步骤1

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

@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])
        }
    }
}

推荐阅读