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

问题描述 投票:0回答:1

当我点击“编辑”按钮时,它可以正常工作以将列表更改为活动状态,并且每个项目旁边都有一个删除图标。但是,排序图标并未按预期显示在每个项目的右侧。

enter image description 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()
    }
}
sorting swiftui edit
1个回答
0
投票

启用排序选项还需要什么?

只要提供.onMove修饰符即会出现。添加

.onDelete(perform: deleteTask)
.onMove { sourceIndices, destinationIndex in
    // << your code here
}
© www.soinside.com 2019 - 2024. All rights reserved.