SwiftUI:当使用 LazyVStack 而不是列表时,如何从待办事项列表中删除项目/检查项目?

问题描述

enter image description here

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

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

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

B.检查待办事项列表中的项目。基本上和上面一样,只是在按下每个待办事项的小检查按钮时。

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

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

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

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

B.当按下每个待办事项中的小复选框时,该待办事项将被删除/不再与 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(),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,radius:1,y:1)
        })
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...