SwiftUI列表选择未选择
我正在尝试使用列表选择,以便用户从列表中选择零天或更多天。我已尝试使用中列出的解决方案,但无效 下面给出了我的代码,我已验证编辑模式是否处于活动状态。我应该期待像上面的答案中那样的行为 代码: 该表应显示与另一个答案相同的选择行为,但当前它仅显示为编辑模式下的正常列表。表单确实会阻止编辑模式传播(或正常工作)。唯一的办法是不要将它嵌入表单中,希望它在发布前得到修复(目前是XcodeBeta5,reporting…)SwiftUI列表选择未选择,swift,swiftui,swiftui-list,Swift,Swiftui,Swiftui List,我正在尝试使用列表选择,以便用户从列表中选择零天或更多天。我已尝试使用中列出的解决方案,但无效 下面给出了我的代码,我已验证编辑模式是否处于活动状态。我应该期待像上面的答案中那样的行为 代码: 该表应显示与另一个答案相同的选择行为,但当前它仅显示为编辑模式下的正常列表。表单确实会阻止编辑模式传播(或正常工作)。唯一的办法是不要将它嵌入表单中,希望它在发布前得到修复(目前是XcodeBeta5,reporting…) 导入快捷界面 结构选择视图:视图{ @绑定变量jobDetails:jobDet
导入快捷界面
结构选择视图:视图{
@绑定变量jobDetails:jobDetails
var weekdays:[String]=[“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”]
var body:一些观点{
VStack{
列表(self.weekdays,id:\.self,selection:$jobDetails.weekdays){day in
文本(天)
}
}
}
}
结构作业详细信息:可识别{
设id=UUID()
var weekdays=Set()
}
结构作业详细信息视图:视图{
让jobDetails:jobDetails
var body:一些观点{
HStack{
文本(“工作日:”)
文本(jobDetails.weekdays.joined(分隔符:“,”))
}
}
}
结构JobDetailHost:视图{
@环境(\.editMode)变量模式
@绑定变量jobDetails:jobDetails
变量isEditing:Bool{
返回模式?.value==.inactive
}
var body:一些观点{
VStack{
//HStack{Spacer();EditButton().padding()}
ZStack{
如果我正在编辑{
jobDetails视图(jobDetails:jobDetails)
}否则{
SelectionView(作业详细信息:$jobDetails)
}
}
}.navigationBarItems(尾部:EditButton())
}
}
结构作业视图:视图{
@状态变量jobDetails:[jobDetails]=[
作业详细信息(),
作业详细信息(),
作业详细信息(),
作业详细信息(),
]
var body:一些观点{
导航视图{
列表中的($jobDetails){(jobDetail:Binding)
导航链接(jobDetail.id.uuidString,目标:JobDetailHost(jobDetails:jobDetail))
}
}
}
}
结构列表选择2视图:视图{
var body:一些观点{
JobsView()
}
}
表单确实停止了EditMode的传播(或者无论如何都不能正常工作)。唯一的办法是不要将它嵌入表单中,希望它在发布前得到修复(目前是XcodeBeta5,reporting…)
导入快捷界面
结构选择视图:视图{
@绑定变量jobDetails:jobDetails
var weekdays:[String]=[“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”]
var body:一些观点{
VStack{
列表(self.weekdays,id:\.self,selection:$jobDetails.weekdays){day in
文本(天)
}
}
}
}
结构作业详细信息:可识别{
设id=UUID()
var weekdays=Set()
}
结构作业详细信息视图:视图{
让jobDetails:jobDetails
var body:一些观点{
HStack{
文本(“工作日:”)
文本(jobDetails.weekdays.joined(分隔符:“,”))
}
}
}
结构JobDetailHost:视图{
@环境(\.editMode)变量模式
@绑定变量jobDetails:jobDetails
变量isEditing:Bool{
返回模式?.value==.inactive
}
var body:一些观点{
VStack{
//HStack{Spacer();EditButton().padding()}
ZStack{
如果我正在编辑{
jobDetails视图(jobDetails:jobDetails)
}否则{
SelectionView(作业详细信息:$jobDetails)
}
}
}.navigationBarItems(尾部:EditButton())
}
}
结构作业视图:视图{
@状态变量jobDetails:[jobDetails]=[
作业详细信息(),
作业详细信息(),
作业详细信息(),
作业详细信息(),
]
var body:一些观点{
导航视图{
列表中的($jobDetails){(jobDetail:Binding)
导航链接(jobDetail.id.uuidString,目标:JobDetailHost(jobDetails:jobDetail))
}
}
}
}
结构列表选择2视图:视图{
var body:一些观点{
JobsView()
}
}
我为此挣扎了一段时间,答案不是@Fabian所想的
您需要使用.onDelete()
,否则选择气泡将不会出现:
表单{
章节(标题:文本(“加班天数”)){
列表(self.weekdays,id:\.self,selection:$selectKeeper){day in
文本(天)
}
.onDelete(执行:noOp)
}
}
.navigationBarTitle(文本(“我的标题”))
我为此挣扎了一段时间,答案不是@Fabian所想的
您需要使用.onDelete()
,否则选择气泡将不会出现:
表单{
章节(标题:文本(“加班天数”)){
列表(self.weekdays,id:\.self,selection:$selectKeeper){day in
文本(天)
}
.onDelete(执行:noOp)
}
}
.navigationBarTitle(文本(“我的标题”))
我自己链接到这个问题的可能重复,这并不能解决我的问题,因为当前的顶级答案是在这个代码中实现的,但没有预期的行为。很好,我没有意识到。我自己链接到这个问题的可能重复,这并不能解决我的问题,因为当前的顶级答案是在这段代码中实现的,但没有预期的行为。好的一点,我没有意识到。
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)
})
}
}
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)
}
}
import SwiftUI
struct SelectionView: View {
@Binding var jobDetails: JobDetails
var weekdays: [String] = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
var body: some View {
VStack{
List(self.weekdays, id: \.self, selection: $jobDetails.weekdays) { day in
Text(day)
}
}
}
}
struct JobDetails: Identifiable {
let id = UUID()
var weekdays = Set<String>()
}
struct JobDetailsView: View {
let jobDetails: JobDetails
var body: some View {
HStack{
Text("Weekdays:")
Text(jobDetails.weekdays.joined(separator: ", "))
}
}
}
struct JobDetailHost: View {
@Environment(\.editMode) var mode
@Binding var jobDetails: JobDetails
var isEditing: Bool {
return mode?.value == .inactive
}
var body: some View {
VStack {
//HStack{ Spacer(); EditButton().padding() }
ZStack{
if isEditing {
JobDetailsView(jobDetails: jobDetails)
} else {
SelectionView(jobDetails: $jobDetails)
}
}
}.navigationBarItems(trailing: EditButton())
}
}
struct JobsView: View {
@State var jobDetails: [JobDetails] = [
JobDetails(),
JobDetails(),
JobDetails(),
JobDetails(),
]
var body: some View {
NavigationView{
List($jobDetails) { (jobDetail: Binding<JobDetails>) in
NavigationLink(jobDetail.id.uuidString, destination: JobDetailHost(jobDetails: jobDetail))
}
}
}
}
struct ListSelection2View: View {
var body: some View {
JobsView()
}
}