使用 "Plus" 按钮将在 Swift 的屏幕上添加一个新的选择器字段

Using a "Plus" button that will add a new Picker field on the screen in Swift

首先,感谢您抽出时间来看这个,你们太棒了!

我是 blind/visually 白天受损的老师,刚刚开始涉足代码以创建一些简洁的工具来推进我们的职业。

我尝试构建的第一个应用程序是一个评估工具。我已经能够使用带有选择器和切换器的表单来相当成功地完成此任务,并在此过程中学到了很多东西。

我遇到的最大问题是记录他们当前的视觉诊断。我们的大多数孩子都有多重诊断,所以我需要一种方法让用户为每个孩子添加他们需要的数量。在@aheze 在 中的回复和一些修改的帮助下,我已经能够使用 ForEach 语句创建我想要的 Button,但所选的 Picker 值是绑定在一起的。这是我目前的代码和图片。

Screenshot of current code preview

@State var eyeConditions = [""]
@State var eyeConditionsList = ""

var body: some View {
    NavigationView {
       Form {
           Section(header: Text("Active Eye Condition(s)")) {
                ForEach(eyeConditions.indices, id: \.self) { index in
                    Picker(
                        selection: $eyeConditionsList,
                        label: Text("Selected Condition:"),
                        content: {
                                Text("").tag("1")
                                Text("Amblyopia").tag("2")
                                Text("Aphakia").tag("3")
                                Text("Astigmatism").tag("4")
                                Text("Bulls Eye Maculopathy").tag("5")
                                Text("Cataract").tag("6")
                                Text("Coloboma").tag("7")
                                Text("Color Blindness").tag("8")
                                Text("Convergence Insufficiency").tag("9")
                                Text("Corneal Scarring").tag("10")
                    })
               }
               Button(action: {
                   eyeConditions.append("")
               }) {
                   Image(systemName: "plus.circle")
                       .foregroundColor(Color.blue)
               
               }
           }
       }
       .navigationBarTitle("Visual Information")
   }
}

我的问题是,如何使每个新创建的选择器值彼此不相关并显示为单独的值?

在此先致谢,非常感谢您抽出时间提供帮助!

  1. 声明eyeConditionsList也为数组

    @State var eyeConditionsList = [""]
    
  2. 在按钮操作中也向 eyeConditionsList

    添加一个项目
    Button(action: {
       eyeConditions.append("")
       eyeConditionsList.append("")
    
  3. selection绑定到适当的索引

    Picker(
        selection: $eyeConditionsList[index]
    

但实际上你只需要一个 @State 属性

@State var eyeConditions = [""]

var body: some View {
    NavigationView {
          Form {
              Section(header: Text("Active Eye Condition(s)")) {
                   ForEach(eyeConditions.indices, id: \.self) { index in
                       Picker(
                           selection: $eyeConditions[index],
                           label: Text("Selected Condition:"),
                           content: {
                                   Text("").tag("1")
                                   Text("Amblyopia").tag("2")
                                   Text("Aphakia").tag("3")
                                   Text("Astigmatism").tag("4")
                                   Text("Bulls Eye Maculopathy").tag("5")
                                   Text("Cataract").tag("6")
                                   Text("Coloboma").tag("7")
                                   Text("Color Blindness").tag("8")
                                   Text("Convergence Insufficiency").tag("9")
                                   Text("Corneal Scarring").tag("10")
                       })
                  }
                  Button(action: {
                      eyeConditions.append("")
                  }) {
                      Image(systemName: "plus.circle")
                          .foregroundColor(Color.blue)
                  
                  }
              }
          }