swiftui - Delete Func 删除列表中的所有项目 - SwiftUI
问题描述
当我从列表中选择列表中的一个项目时,它只会删除所选项目。
但是,当我在 AllView 中列出所有列表及其提醒时,它会删除列表中的所有提醒。
我怎样才能克服这个问题?
为了清楚地说明我的问题,我有两个视频显示了这两种情况。
这是我在 ReminderCell 视图中的删除按钮
struct ReminderCell: View {
@Environment(\.managedObjectContext) private var viewContext
var reminder: CDReminder
@State var isSelected: Bool
Button(action: {
self.isSelected = true
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
deleteReminder(at: Int(reminder.index))
}
再次在 ReminderCell 内我有 deleteReminder 功能
func deleteReminder(at offsets: Int) {
viewContext.delete(reminder)
PersistenceController.shared.saveContext()
}
在 AllView 内,我将 listDetailCell 称为
struct AllView: View {
@State var title = ""
@State var note = ""
@State var releaseDate = Date()
@ObservedObject var list : CDListModel
@State var selectedList = CDListModel()
@Environment(\.presentationMode) var mode
@Environment(\.managedObjectContext) private var viewContext
@FetchRequest var lists: FetchedResults<CDListModel>
init(){
list = CDListModel()
let request: NSFetchRequest<CDListModel> = CDListModel.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: \CDListModel.name, ascending: true)]
request.entity = CDListModel.entity()
_lists = FetchRequest(fetchRequest: request)
}
var body: some View {
List{
ForEach(lists, id: \.self) { list in
ListDetailCell(list: list)
}
}
}
我的列表DetailCell
struct ListDetailCell: View {
@State var title = ""
@ObservedObject var list : CDListModel
@State var selectedList: CDListModel!
@State var isAddReminderTapped = false
@Environment(\.managedObjectContext) private var viewContext
var body: some View {
VStack(alignment: .leading){
Text(list.text ?? "")
ForEach((list.reminders?.allObjects as! [CDReminder]).indices , id: \.self) { reminderIndex in
ReminderCell(reminder: (list.reminders?.allObjects[reminderIndex]) as! CDReminder, isSelected: false, selectedList: $selectedList, onComplete: {})
}
}
}
}
解决方案
不知何故,在列表中使用 ForEach 在 AllView 中导致了这个问题。
当我像下面那样更改 AllView 的主体时,我的问题消失了。
NavigationView {
ScrollView {
VStack{
HStack{
Text("Tumu")
.font(.system(size: 40, weight: .bold, design: .rounded))
.foregroundColor(.gray)
Spacer()
}
.padding(.leading)
ForEach(lists, id: \.self) { list in
ListDetailCell(list: list)
}
推荐阅读
- ldap - ldap 搜索属性 X 包含多个值的对象
- java - 从二维数组中的所有值填充一维数组
- python - 正则表达式匹配线性系统 ax+by=c
- git - 我可以配置git如何检测合并冲突吗
- php - 如何从字符串中删除 H1 标签和内部内容
- android-studio - Visual Studio 模拟器:如何使用 PC 的键盘输入(硬件)而不是 Android 软键盘
- c - 使用 mmap 映射共享内存大小超过 ftruncate 完成的设置大小
- c# - 使用数字的随机目录生成器,但当我包含字母并且没有错误时不会创建任何内容
- java - 如何在托管在另一台机器上的 Jenkins 上运行 maven 项目(-eclipse-java-并推送到 git-)中的 selenium 测试脚本
- apache-spark - Apache Spark 写入多个输出 [不同的镶木地板模式],无需缓存