在 SwiftUI 中不使用 onDelete 删除 CoreData
Deleting CoreData without onDelete in SwiftUI
我的应用程序在 VStack 中显示如下 CoreData。由于 ScrollView,无法列出列表。
VStack (spacing: 20) {
ForEach(groups) { group in
NavigationLink(destination: GroupView()) {
ZStack (alignment: .bottomLeading) {
Image(uiImage: (UIImage(data: group.groupThumbnail ?? self.image) ?? UIImage(named: "defaultGroupThumbnail"))!)
.resizable(capInsets: EdgeInsets())
.aspectRatio(contentMode: .fill)
.frame(height: 200, alignment: .center)
.cornerRadius(22)
VStack (alignment: .leading) {
Text("\(group.groupTitle ?? "Untitled")")
.font(.title)
.fontWeight(.heavy)
.multilineTextAlignment(.leading)
Text("Consists of 5 Flowers")
}
.padding([.leading, .bottom], 18.0)
.foregroundColor(.primary)
}
但是,我可以使用 onDelete 删除我的条目。因此,我试图找到 .contextMenu 的替代方案。
.contextMenu {
Button (role: .destructive) {
withAnimation {
self.deleteGroups(at: IndexSet.init(arrayLiteral: 0)) // This is the code I copied from the video.
}
} label: {
Label("Delete", systemImage: "trash")
}
Button {
print()
} label: {
Label("Edit", systemImage: "square.and.pencil")
}
}
我看到一个视频,其中有人可以通过结合使用这些代码来删除他的条目
当点击“删除”时,应通过以下代码删除该条目:
func deleteGroups(at offsets: IndexSet) {
for offset in offsets {
let group = groups[offset]
viewContext.delete(group)
}
//try? viewContext.save()
}
但是,每当我在上下文菜单中单击此“删除”按钮时,都会删除错误的按钮。我无法获取删除所选条目的代码。如果有人可以帮助我,那将不胜感激。提前致谢!
不是那么重要,但是,与“onDelete”相比,是否有删除功能(例如滑动删除)我仍然可以实现?在我的情况下是否有动画的可能性?
亲切的问候
按正常方式删除即可:
Button (role: .destructive) {
withAnimation {
viewContext.delete(group)
do {
try viewContext.save()
} catch {
// show error
}
}
} label: {
Label("Delete", systemImage: "trash")
}
仅供参考,我还编辑了您的问题以修复您的 ForEach
语法。
ForEach(groups, id: \.self) { group in
.contextMenu {
Button (role: .destructive) {
for index in groups.indices{
if group == groups[index]{
withAnimation{
viewContext.delete(group)
}
}
}
} label: {
Label("Delete", systemImage: "trash")
}
Button {
print()
} label: {
Label("Edit", systemImage: "square.and.pencil")
}
}
我的应用程序在 VStack 中显示如下 CoreData。由于 ScrollView,无法列出列表。
VStack (spacing: 20) {
ForEach(groups) { group in
NavigationLink(destination: GroupView()) {
ZStack (alignment: .bottomLeading) {
Image(uiImage: (UIImage(data: group.groupThumbnail ?? self.image) ?? UIImage(named: "defaultGroupThumbnail"))!)
.resizable(capInsets: EdgeInsets())
.aspectRatio(contentMode: .fill)
.frame(height: 200, alignment: .center)
.cornerRadius(22)
VStack (alignment: .leading) {
Text("\(group.groupTitle ?? "Untitled")")
.font(.title)
.fontWeight(.heavy)
.multilineTextAlignment(.leading)
Text("Consists of 5 Flowers")
}
.padding([.leading, .bottom], 18.0)
.foregroundColor(.primary)
}
但是,我可以使用 onDelete 删除我的条目。因此,我试图找到 .contextMenu 的替代方案。
.contextMenu {
Button (role: .destructive) {
withAnimation {
self.deleteGroups(at: IndexSet.init(arrayLiteral: 0)) // This is the code I copied from the video.
}
} label: {
Label("Delete", systemImage: "trash")
}
Button {
print()
} label: {
Label("Edit", systemImage: "square.and.pencil")
}
}
我看到一个视频,其中有人可以通过结合使用这些代码来删除他的条目 当点击“删除”时,应通过以下代码删除该条目:
func deleteGroups(at offsets: IndexSet) {
for offset in offsets {
let group = groups[offset]
viewContext.delete(group)
}
//try? viewContext.save()
}
但是,每当我在上下文菜单中单击此“删除”按钮时,都会删除错误的按钮。我无法获取删除所选条目的代码。如果有人可以帮助我,那将不胜感激。提前致谢!
不是那么重要,但是,与“onDelete”相比,是否有删除功能(例如滑动删除)我仍然可以实现?在我的情况下是否有动画的可能性?
亲切的问候
按正常方式删除即可:
Button (role: .destructive) {
withAnimation {
viewContext.delete(group)
do {
try viewContext.save()
} catch {
// show error
}
}
} label: {
Label("Delete", systemImage: "trash")
}
仅供参考,我还编辑了您的问题以修复您的 ForEach
语法。
ForEach(groups, id: \.self) { group in
.contextMenu {
Button (role: .destructive) {
for index in groups.indices{
if group == groups[index]{
withAnimation{
viewContext.delete(group)
}
}
}
} label: {
Label("Delete", systemImage: "trash")
}
Button {
print()
} label: {
Label("Edit", systemImage: "square.and.pencil")
}
}