Swiftui coredata foreach scrollview:删除按钮
Swiftui coredata foreach scrollview : delete button
我正在尝试在每个列表上添加删除按钮。 (未使用滑动功能)
这是我当前的摘要代码。
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Saving.entity(), sortDescriptors: [
NSSortDescriptor(KeyPath: \Saving.orders, ascending: true),
~~~
]
) var savings : FetchedResults<Saving>
var body: some View {
NavigationView{
ScrollView(.vertical, showsIndicators: false){
ForEach(savings, id : \.self) { save in
ZStack{
HStack(alignment: .top){
Menu(content: {Button(action: {
self.delete(at:IndexSet.init(arrayLiteral: 0))}) {
Text("Delete")
Image(systemName: "trash")}
}) {
Image(systemName:"line.horizontal.3")}
}
}
}
}
}
}
func delete(at offsets: IndexSet) {
for index in offsets {
let deletes = saving[index]
self.moc.delete(deletes)
}
try! self.moc.save()
}
}
我可以在按钮操作中指定索引号,当我点击列表中有几行的按钮时,我可以一次又一次地只删除第一行。就像当我点击任何行中的删除按钮时,第一行总是被删除。很明显,因为索引号是 0。
当我点击该行中的按钮时,我想删除该行。
我该如何解决这个问题?
谢谢大家!
您需要传递 ``` 的正确索引 IndexSet.init(arrayLiteral: 0)``
所以使用 indices
并首先找到索引并作为 Int 索引传递。
像这样,
正文
var body: some View {
NavigationView{
ScrollView(.vertical, showsIndicators: false){
ForEach(savings.indices, id : \.self) { index in //<--- Here
let save = savings[index] //<--- Here
ZStack{
HStack(alignment: .top){
Menu(content: {Button(action: {
self.delete(at: index)}) { //<--- Here
Text("Delete")
Image(systemName: "trash")}
}) {
Image(systemName:"line.horizontal.3")}
}
}
}
}
}
}
删除函数
func delete(at index: Int) { //<--- Here
let deletes = saving[index]
self.moc.delete(deletes)
try! self.moc.save()
}
我正在尝试在每个列表上添加删除按钮。 (未使用滑动功能)
这是我当前的摘要代码。
import SwiftUI
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Saving.entity(), sortDescriptors: [
NSSortDescriptor(KeyPath: \Saving.orders, ascending: true),
~~~
]
) var savings : FetchedResults<Saving>
var body: some View {
NavigationView{
ScrollView(.vertical, showsIndicators: false){
ForEach(savings, id : \.self) { save in
ZStack{
HStack(alignment: .top){
Menu(content: {Button(action: {
self.delete(at:IndexSet.init(arrayLiteral: 0))}) {
Text("Delete")
Image(systemName: "trash")}
}) {
Image(systemName:"line.horizontal.3")}
}
}
}
}
}
}
func delete(at offsets: IndexSet) {
for index in offsets {
let deletes = saving[index]
self.moc.delete(deletes)
}
try! self.moc.save()
}
}
我可以在按钮操作中指定索引号,当我点击列表中有几行的按钮时,我可以一次又一次地只删除第一行。就像当我点击任何行中的删除按钮时,第一行总是被删除。很明显,因为索引号是 0。 当我点击该行中的按钮时,我想删除该行。 我该如何解决这个问题? 谢谢大家!
您需要传递 ``` 的正确索引 IndexSet.init(arrayLiteral: 0)``
所以使用 indices
并首先找到索引并作为 Int 索引传递。
像这样,
正文
var body: some View {
NavigationView{
ScrollView(.vertical, showsIndicators: false){
ForEach(savings.indices, id : \.self) { index in //<--- Here
let save = savings[index] //<--- Here
ZStack{
HStack(alignment: .top){
Menu(content: {Button(action: {
self.delete(at: index)}) { //<--- Here
Text("Delete")
Image(systemName: "trash")}
}) {
Image(systemName:"line.horizontal.3")}
}
}
}
}
}
}
删除函数
func delete(at index: Int) { //<--- Here
let deletes = saving[index]
self.moc.delete(deletes)
try! self.moc.save()
}