SwiftUI列表选择未选择

时间:2019-08-16 15:45:03

标签: swift swiftui swiftui-list

我正在尝试为用户使用列表选择,以使列表中的天数不超过零天。我尝试使用this question中列出的解决方案,但无济于事。

下面给出了我的代码,并且我确认编辑模式处于活动状态。我应该期望像上面链接的答案那样的行为。

代码:

struct EditView: View {

    @State var selectKeeper = Set<String>()
    var weekdays: [String] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    @Environment(\.editMode) var mode

    var body: some View {

            Form {

                Section(header: Text("Overtime Days")) {

                    List(self.weekdays, id: \.self, selection: $selectKeeper) { day in
                        Text(day)
                    }

                }

            }   .navigationBarTitle(Text("My Title"))
                .padding(.top)
                .onAppear(perform: {
                    print(self.mode?.value as Any)
                })

        }
}

EditButton包含在父视图中,并在以下代码中启用。

struct JobDetailHost: View {

    @Environment(\.editMode) var mode
    @Binding var jobDetails: JobDetails

    var body: some View {

        VStack {

                if self.mode?.value == .inactive {
                    JobDetailView(jobDetails: jobDetails)
                } else {
                    EditView(jobDetails: $jobDetails)
                        .onDisappear(perform: {
                            //DO STUFF...
                        })
                } 
        }
        .navigationBarItems(trailing: EditButton())
        .onAppear(perform: bindDraft)


    }
}

该表应显示选择行为,如在其他答案中一样,但当前它在编辑模式下仅显示为普通列表。

2 个答案:

答案 0 :(得分:2)

Form 确实阻止了 EditMode 传播(或仍然正常工作)。唯一的方法是不要将其嵌入 Form 中,并希望它在发布之前得到修复(当前为XcodeBeta5,正在报告。)。

def expanding(l):
 for i in range(0,len(l)-3):
  if (abs(l[i+2]-l[i+1])<=abs(l[i+1]-l[i])):
   return False 
 return True

答案 1 :(得分:0)

我为此挣扎了一段时间,答案不是@Fabian的想法。

您需要使用.onDelete(),否则选择气泡将不会出现:

Form {
    Section(header: Text("Overtime Days")) {
        List(self.weekdays, id: \.self, selection: $selectKeeper) { day in
            Text(day)
        }
        .onDelete(perform: noOp)
    }
}
.navigationBarTitle(Text("My Title"))