如何创建一组具有在 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】:

问题

这里的任务是为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])
        
    

【讨论】:

以上是关于如何创建一组具有在 SwiftUI 中编辑的单独变量的文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速创建一组两种类型?

您如何创建一组与具有特定属性的其他实体有关系的实体?在核心数据中

如何在 testflight 上创建一组测试人员

如何快速创建一组用户默认值?

PHP - 在两个静态数字之间创建一组数字范围

使用 ForEach 分层视图并使用 ZStack 偏移以创建一堆扑克筹码 (SwiftUI)