当EditMode更改时,我想执行某个操作。
具体来说,在编辑模式下,用户可以选择要删除的一些项目。他通常在之后按垃圾桶按钮。但他也可能按完成。当他再次按编辑时,之前选择的项目仍然被选择。我希望所有项目都被清除。
struct ContentView: View {
@State var isEditMode: EditMode = .inactive
@State var selection = Set<UUID>()
var items = [Item(), Item(), Item(), Item(), Item()]
var body: some View {
NavigationView {
List(selection: $selection) {
ForEach(items) { item in
Text(item.title)
}
}
.navigationBarTitle(Text("Demo"))
.navigationBarItems(
leading: EditButton(),
trailing: addDelButton
)
.environment(\.editMode, self.$isEditMode)
}
}
private var addDelButton: some View {
if isEditMode == .inactive {
return Button(action: reset) {
Image(systemName: "plus")
}
} else {
return Button(action: reset) {
Image(systemName: "trash")
}
}
}
private func reset() {
selection = Set<UUID>()
}
}
项目的定义:
struct Item: Identifiable {
let id = UUID()
let title: String
static var i = 0
init() {
self.title = "\(Item.i)"
Item.i += 1
}
}
editMode
设为@State
变量,以便在editMode
未激活时,垃圾桶按钮会变回加号。 - caram