首先让我说我对编程很陌生,我几乎没有经验。我需要为一个学校项目做一个待办事项清单,我真的需要帮助。
我正在尝试制作一个布局更美观的待办事项列表,因此我没有将其制作为列表视图,而是将其制作为嵌入到 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)
})
}
}
}