首页 > 解决方案 > 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: {})
            }
        }
    }
}

标签: swiftui

解决方案


不知何故,在列表中使用 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)
                    }

推荐阅读