onDelete 附加到 ForEach 但没有滑动手势
Posted
技术标签:
【中文标题】onDelete 附加到 ForEach 但没有滑动手势【英文标题】:onDelete is attached to ForEach but there's no swipe gestures 【发布时间】:2021-06-21 14:14:49 【问题描述】:将 .onDelete() 附加到 ForEach 后,什么也不会发生 - 无法滑动删除,点击编辑也不会显示任何内容。不知道我做错了什么。它在模拟器和我的 iPhone (ios 14.5) 上编译得很好这是我的实际代码。
NavigationView
List
ForEach(medicines) medicine in
HStack
VStack(alignment: .leading)
Text("\(medicine.name!) \(medicine.strength) \(medicine.unit!)" as String)
.font(.headline)
Text("\(medicine.quantity) x \(medicine.form!) \(medicine.direction!)" as String)
.font(.subheadline)
.frame(height: 50)
.onDelete(perform: deleteMedicines)
.listStyle(PlainListStyle())
.navigationBarTitle("Medicines")
.navigationBarItems(leading: EditButton(), trailing: Button(action:
self.showingAddScreen.toggle()
)
Image(systemName: "plus")
)
.sheet(isPresented: $showingAddScreen)
AddMedicineView().environment(\.managedObjectContext, self.viewContext)
然后是 deleteMedicines() 函数:
private func deleteMedicines(offsets: IndexSet)
withAnimation
offsets.map medicines[$0] .forEach(viewContext.delete)
do
try viewContext.save()
catch
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nsError = error as NSError
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
我已经看到了几种不同的方法,并且我尝试了一些。当我第一次玩 List 时,我就让它工作了。 deleteMedicines 代码是从 Core Data 的 Xcode 模板中借用的。感谢您提前提供任何帮助。
【问题讨论】:
【参考方案1】:提供的代码不可测试,但请尝试仅在 ForEach
上保留 onDelete
修饰符,其他所有内容移至 List
(修饰符的放置很重要,可能是您的问题的原因),例如
NavigationView
List
ForEach(medicines) medicine in
// content here
.onDelete(perform: deleteMedicines) // << here !!
.listStyle(PlainListStyle())
.navigationBarTitle("Medicines")
.navigationBarItems(leading: EditButton(), trailing: Button(action:
self.showingAddScreen.toggle()
)
Image(systemName: "plus")
)
.sheet(isPresented: $showingAddScreen)
AddMedicineView().environment(\.managedObjectContext, self.viewContext)
【讨论】:
谢谢。我开始认为我以某种方式制作了一个静态列表,但您的解决方案非常完美。以上是关于onDelete 附加到 ForEach 但没有滑动手势的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .reversed() 处理 SwiftUI 列表数组的 .onDelete
Swiftui foreach 索引超出范围 ondelete 问题
SwiftUI .onDelete 从 ForEach 获取 var
SwiftUI ForEach.onDelete 在 TabView 中无法正常工作