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中的
//