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