SwiftUI 中新文本字段的不同状态变量

Different State Variables for New Textfields in SwiftUI

我是 SwiftUI 的新手,有一种情况我可以添加多个人的数据,每次我 点击 按钮, 它将收集新人的数据。

场景是这样的:

我在一个文本字段上添加数据,它在每个文本字段上更新,因为文本字段只有一个 状态变量。我的问题 是如何为文本字段添加多个状态变量,因为文本字段没有固定编号。我的代码是:



import SwiftUI

struct TextFieldText: View {
    
    @State private var name = ""
    @State private var email = ""
    @State var totalValue: Int = 1
    
    var body: some View {
        
        VStack(spacing: 30) {
            
            ForEach((1...totalValue).reversed(), id: \.self) {_ in

                VStack {
                    CustomTextfield(text: $name, placeHolder: "Enter name", title: "Enter Name")
                    
                    CustomTextfield(text: $email, placeHolder: "Enter email", title: "Enter Email")
                }
            }
            
            Button {
                print("add person tapped")
                totalValue = totalValue + 1
            } label: {
                ZStack {
                    RoundedRectangle(cornerRadius: 60)
                        .frame(width: 180, height: 45)
                        .foregroundColor(Color(ColorName.appBlue.rawValue))
                    Text("Add another person")
                        .foregroundColor(.white)
                        .font(Font.custom(InterFont.bold.rawValue, size: 14))
                }
            }
            Spacer()
        }
        
    }
}

struct TextFieldText_Previews: PreviewProvider {
    static var previews: some View {
        TextFieldText()
    }
}

我想在每个文本字段上添加不同的数据。我如何在 SwiftUI 中实现它?

您想处理多个人,但您只有一个 name一个 email 属性.

你需要一个数组。 swifty 方式是自定义结构

struct Person  {
    var name, email : String
}

在视图中用 Person

的空数组替换 nameemail
@State private var people = [Person]()

ForEach 循环中迭代索引并将 text 参数绑定到给定索引处的人。

我没有你的自定义文本字段,代码使用默认字段

ForEach(people.indices, id: \.self) { index in
    VStack {
        TextField("Enter name", text: $people[index].name)
        TextField("Enter email", text: $people[index].email)
    }
    .padding()
}

最后在按钮动作中添加一个新的Personpeople

Button {
    print("add person tapped")
    people.append(Person(name: "", email: ""))