1

在此处输入图像描述

首先让我说我对编程很陌生,我几乎没有经验。我需要为一个学校项目做一个待办事项清单,我真的需要帮助。

我正在尝试制作一个布局更美观的待办事项列表,因此我没有将其制作为列表视图,而是将其制作为嵌入到 ScrollView 中的 LazyVStack。现在我试图想出一种方法来:

一个。删除不同的待办事项;我曾尝试使用 EditButton() 来执行此操作,但因为它不是我使用的列表视图,所以我不能使用简单的:.onDelete 修饰符。

湾。检查待办事项列表中的项目。基本上与上述相同,只是在为每个待办事项按下小检查按钮时。

我尝试使用布尔状态变量:@State private varshowingGroupBox:Bool = true,然后在按下按钮时切换它,但由于某种原因,这不起作用。

我还尝试了 deleteTodo 函数(参见第二个代码块),但无济于事。

因此,如果有人可以帮助我解决以下问题,我将不胜感激:

一个。在导航栏中按下 EditButton() 时,有一种方法可以删除待办事项。

湾。当按下每个待办事项中的小复选框时,待办事项将被删除/不再与 CoreData 一起存储。

这是我的待办事项清单的代码:

import SwiftUI
import CoreData

struct ContentView: View {
    
    let persistenceController = PersistenceController.shared
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(entity: Todo.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Todo.name, ascending: true)])
    var todos: FetchedResults<Todo>
    
    @State private var showingNewToDoPanel: Bool = false
  //  @State private var showingGroupBox: Bool = true
    
    var body: some View {
        NavigationView {
            ScrollView {
                LazyVStack {
                    ForEach(self.todos, id: \.self) { todo in
                        
//                        if isShowingGroupBox { could be used for a "Clear all" functionality, where when the user clicks on a button, all of the todos disappear.
                            GroupBox {
                            HStack {
                                
                                CheckBoxView()
                                Text(todo.name ?? "Untitled").foregroundColor(.black)
                                Spacer()
                                Text(todo.priority ?? "No priority")
                            }
                        }//: GROUP BOX
                        .clipShape(Capsule())
                        .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.25)), radius:4, x:0, y:4)
                            
//                        }//:CONDITIONAL
                    }
                }//: LAZYVSTACK
                .padding(.horizontal, 20)
                .padding(.top, 20)
                .navigationBarTitle("To-Dos", displayMode: .automatic)
                .navigationBarItems(leading:
                                      EditButton(),
                    trailing:
                
                                    Button(action: {
                                        
                                        self.showingNewToDoPanel.toggle()
                                        
                                    }, label: {
                                            Image(systemName: "plus")
                                        }) //:BUTTON
                                        .sheet(isPresented: $showingToDoView, content: {
                                            ToDoView().environment(\.managedObjectContext, self.managedObjectContext)
                                        })
                
                
            )
            }//: SCROLLVIEW
        }//: NAVIGATIONVIEW
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
    }
}

这是我的按钮代码。

import SwiftUI
import CoreData

struct CheckBoxView: View {
    
//    @State private var isShowingToDo: Bool = true "CLEAR ALL"-esque FUNCTIONALITY

    let persistenceController = PersistenceController.shared
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(entity: Todo.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Todo.name, ascending: true)])
    var todos: FetchedResults<Todo>
    
    func deleteTodo(at offsets: IndexSet) {
      for index in offsets {
        let todo = todos[index]
        managedObjectContext.delete(todo)

        do {
          try managedObjectContext.save()
        } catch {
          print(error)
        }
      }
    }
    
    
    var body: some View {
        
        GeometryReader() { geometry in
        Button(action: {
            
//            self.isShowingToDo.toggle()
            
           deleteTodo()
            
        }, label: {
                RoundedRectangle(cornerRadius: 4)
                    .fill(Color(#colorLiteral(red: 0.978395164, green: 0.9725784659, blue: 0.9828661084, alpha: 1)))
                    .frame(width: geometry.size.height / 0.8, height: geometry.size.height / 0.8)
                    .shadow(color: Color(#colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.25)), radius:1, x:0, y:1)
        })
        }
    }
}
4

0 回答 0