当不在TabView中时,这段代码可以很好地工作。一旦将其放入TabView中,.editMode更改似乎不会对List产生任何影响。
struct ContentView: View {
@Environment(\.editMode) var editMode
var body: some View {
TabView {
myView().tabItem {
Text("test")
}.tag(0)
}
}
}
struct myView : View {
@State var list = ["a", "b", "c"]
@Environment(\.editMode) var editMode
var body: some View {
VStack {
Button(action: {
if self.editMode?.wrappedValue == .active {
self.editMode?.wrappedValue = .inactive
} else {
self.editMode?.wrappedValue = .active
}
}, label: {
Text("Edit")
})
List {
ForEach(list, id:\.self) {val in
Text(val)
}.onDelete(perform: { indexSet in
()
})
}
}
}
}不确定这是否是错误,或者在TabView中的.editMode是否有某种不同。
发布于 2020-12-27 06:39:17
您可以显式地将editMode
struct myView: View {
@State var list = ["a", "b", "c"]
@Environment(\.editMode) var editMode
var body: some View {
VStack {
Button(action: {
if self.editMode?.wrappedValue == .active {
self.editMode?.wrappedValue = .inactive
} else {
self.editMode?.wrappedValue = .active
}
}, label: {
Text("Edit")
})
List {
ForEach(list, id: \.self) { val in
Text(val)
}.onDelete(perform: { indexSet in
()
})
}
.environment(\.editMode, editMode) // <- inject here
}
}
}发布于 2020-12-27 06:48:02
您可以通过添加EditButton来切换列表视图的编辑模式
struct ContentView: View {
@State var list = ["a", "b", "c"]
var body: some View {
NavigationView {
List {
ForEach(list, id: \.self) { value in
Text(value)
}
.onDelete(perform: delete)
}
.navigationBarItems(trailing: EditButton())
}
}
func delete(at offsets: IndexSet) {
list.remove(atOffsets: offsets)
}
}发布于 2020-12-27 06:35:54
尝试使用EditButton()而不是创建普通的Button
这对我很有效:
VStack {
EditButton()
List {
ForEach(list, id:\.self) {val in
Text(val)
}.onDelete(perform: { indexSet in
()
})
}
}https://stackoverflow.com/questions/65461226
复制相似问题