如何在 SwiftUI 中使用 Edit/Done 按钮启用排序选项?
How do I enable the sort option with the Edit/Done Button in SwiftUI?
当我点击“编辑”按钮时,它可以正常工作,将列表更改为活动状态,每个项目旁边都有一个删除图标。但是,排序图标没有按预期显示在每个项目的右侧。
这让我相信我忽略了以下代码中的一个关键元素。启用排序选项还需要什么?
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Task.entity(), sortDescriptors:[
NSSortDescriptor(keyPath: \Task.isComplete, ascending: true)
]) var tasks: FetchedResults<Task>
@State private var showingAddScreen = false
var body: some View {
NavigationView {
List {
ForEach(tasks, id: \.self) { task in
HStack {
Image(systemName: task.isComplete ? "square.fill" : "square")
.padding()
.onTapGesture {
task.isComplete.toggle()
try? self.moc.save()
print("Done button tapped")
}
Text(task.name ?? "Unknown Task")
Spacer()
Image("timer")
.onTapGesture {
print("Timer button tappped")
}
}
}
.onDelete(perform: deleteTask)
}
.navigationBarTitle("To Do List", displayMode: .inline)
.navigationBarItems(leading: EditButton(), trailing: Button(action: {
self.showingAddScreen.toggle()
}) {
Image(systemName: "plus")
})
.sheet(isPresented: $showingAddScreen) {
AddTaskView().environment(\.managedObjectContext, self.moc)
}
}
}
func deleteTask(at offsets: IndexSet) {
for offset in offsets {
let task = tasks[offset]
moc.delete(task)
}
try? moc.save()
}
}
What else is required to enable the sort option?
只要提供 .onMove
修饰符,它就会出现,即。添加
.onDelete(perform: deleteTask)
.onMove { sourceIndices, destinationIndex in
// << your code here
}
当我点击“编辑”按钮时,它可以正常工作,将列表更改为活动状态,每个项目旁边都有一个删除图标。但是,排序图标没有按预期显示在每个项目的右侧。
这让我相信我忽略了以下代码中的一个关键元素。启用排序选项还需要什么?
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Task.entity(), sortDescriptors:[
NSSortDescriptor(keyPath: \Task.isComplete, ascending: true)
]) var tasks: FetchedResults<Task>
@State private var showingAddScreen = false
var body: some View {
NavigationView {
List {
ForEach(tasks, id: \.self) { task in
HStack {
Image(systemName: task.isComplete ? "square.fill" : "square")
.padding()
.onTapGesture {
task.isComplete.toggle()
try? self.moc.save()
print("Done button tapped")
}
Text(task.name ?? "Unknown Task")
Spacer()
Image("timer")
.onTapGesture {
print("Timer button tappped")
}
}
}
.onDelete(perform: deleteTask)
}
.navigationBarTitle("To Do List", displayMode: .inline)
.navigationBarItems(leading: EditButton(), trailing: Button(action: {
self.showingAddScreen.toggle()
}) {
Image(systemName: "plus")
})
.sheet(isPresented: $showingAddScreen) {
AddTaskView().environment(\.managedObjectContext, self.moc)
}
}
}
func deleteTask(at offsets: IndexSet) {
for offset in offsets {
let task = tasks[offset]
moc.delete(task)
}
try? moc.save()
}
}
What else is required to enable the sort option?
只要提供 .onMove
修饰符,它就会出现,即。添加
.onDelete(perform: deleteTask)
.onMove { sourceIndices, destinationIndex in
// << your code here
}