Sorting 如何使用SwiftUI中的“编辑/完成”按钮启用排序选项?

Sorting 如何使用SwiftUI中的“编辑/完成”按钮启用排序选项?,sorting,swiftui,edit,Sorting,Swiftui,Edit,当我点击编辑按钮时,它可以正确地将列表更改为活动状态,每个项目旁边都有一个删除图标。但是,排序图标并不像预期的那样显示在每个项目的右侧 这让我相信我忽略了下面代码中的一个关键元素。启用排序选项还需要什么 struct ContentView: View { @Environment(\.managedObjectContext) var moc @FetchRequest(entity: Task.entity(), sortDescriptors:[ NSSo

当我点击编辑按钮时,它可以正确地将列表更改为活动状态,每个项目旁边都有一个删除图标。但是,排序图标并不像预期的那样显示在每个项目的右侧

这让我相信我忽略了下面代码中的一个关键元素。启用排序选项还需要什么

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()
    }
}
struct ContentView:View{
@环境(\.managedObjectContext)变量moc
@FetchRequest(实体:Task.entity(),排序描述符:[
NSSortDescriptor(键路径:\Task.isComplete,升序:true)
])var任务:FetchedResults
@状态私有变量showingAddScreen=false
var body:一些观点{
导航视图{
名单{
ForEach(tasks,id:\.self){task in
HStack{
图像(系统名称:task.isComplete?“square.fill”:“square”)
.padding()
.ontapsigne{
task.isComplete.toggle()
试试?self.moc.save()
打印(“点击完成按钮”)
}
文本(task.name??“未知任务”)
垫片()
图像(“计时器”)
.ontapsigne{
打印(“定时器按钮敲击”)
}
}
}
.onDelete(执行:deleteTask)
}
.navigationBarTitle(“待办事项列表”,显示模式:。内联)
.navigationBarItems(前导:EditButton(),尾随:Button(操作:{
self.showingAddScreen.toggle()
}) {
图像(系统名称:“plus”)
})
.表(显示:$showingAddScreen){
AddTaskView().environment(\.managedObjectContext,self.moc)
}
}
}
func deleteTask(偏移量处:IndexSet){
用于偏移中的偏移{
让任务=任务[偏移量]
主运行中心删除(任务)
}
试试看?moc.save()
}
}
启用排序选项还需要什么

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()
    }
}
只要提供了
.onMove
修改器,即添加

.onDelete(perform: deleteTask)
.onMove { sourceIndices, destinationIndex in
    // << your code here
}
.onDelete(执行:deleteTask)
.onMove{sourceindex,destinationIndex中的
//