【发布时间】:2021-08-06 06:53:11
【问题描述】:
这里是菜鸟。
所以我编写了一个基本的待办事项应用程序,我需要用户能够编辑他之前输入的任务。为此,我希望通过以下方式重用我的 AddTaskView:一旦我在任务上点击“编辑”,就会显示 AddTaskView 表单并填充所有任务数据,然后按“保存”实际上更新数据,而不是添加一个新任务。
目前,我的 AddTaskView 将所有表单变量存储在@State 变量中,这些变量默认具有值,例如:
@State private var taskTitle : String = ""
如何将数据发送到已经可用的 AddTaskView,因为任务已经存在以便能够填充适当的字段?我的理解是我不能只从视图外部设置@State 变量值。
当前的 AddTaskView.swift
struct AddTaskView: View {
//CoreDatas managedObjectEnvironment
@StateObject var vm : viewModel
@Environment(\.managedObjectContext) var moc
@Environment(\.presentationMode) var presentationMode
var categories : FetchedResults<Category>
@State private var taskTitle : String = ""
@State private var taskPriority : String = "Low"
@State private var chosenCategory : String? = ""
@State private var taskDate : Date = Date()
let priorities = ["Low", "High"]
var body: some View {
NavigationView {
Form {
Section(header: Text("Task info")) {
TextField("Task title", text: $taskTitle)
}
Section {
DatePicker("Date", selection: $taskDate)
}
Section {
Picker(
selection: $taskPriority,
label: Text("Priority")
) {
ForEach(self.priorities, id: \.self) {
Text($0).tag($0)
}
}
}
Section {
Picker(
selection: $chosenCategory,
label: Text("Category")
) {
ForEach(self.categories, id: \.categoryName) { cat in
Text(cat.categoryName ?? "Unknown").tag(cat.id)
}
}
}
Section {
Button("Save") {
self.vm.addTask(moc: self.moc, title: self.taskTitle, date: self.taskDate, priority: self.taskPriority, chosenCategory: chosenCategory!)
self.presentationMode.wrappedValue.dismiss()
}
}
}
.navigationTitle("Add Task")
}
}
我想从拥有所有任务信息的另一个视图中调用并显示此 AddTaskView。据我了解,我不能只呈现如下视图:
AddTaskView(taskTitle: aTitle, taskPriority: aPriority, etc)
欢迎任何指针。谢谢!
【问题讨论】:
标签: swift swiftui state reusability