我的目标是,当用户在一个视图(添加新任务)上填写表单并按下“创建新任务”按钮时,表单中的数据将转移到另一个视图(查看作业)并成为列表中的新项目。此列表项将包含所有 5 个数据变量,并且应该是可点击的。
但是,我在连接视图之间的属性时遇到了麻烦,这是我添加分配页面的代码:
import SwiftUI
class FormViewModel: ObservableObject {
@State var taskName = ""
@State var dueDate = ""
@State var subject = ""
@State var weighting = ""
@State var totalMarks = ""
@State var appPage = 0
}
struct AddAssignment: View {
@StateObject var viewModel = FormViewModel()
var body: some View {
NavigationView {
VStack {
HStack { // Titling
Spacer()
Text("Add New Task")
.font(.headline)
.scaleEffect(2.0)
Spacer()
Image(systemName: "plus.square.fill")
.scaleEffect(2.0)
Spacer()
}
Form { // Gathering data
Section {
TextField("Enter task name",
text: $viewModel.taskName)
TextField("Enter due date",
text: $viewModel.dueDate)
TextField("Enter subject",
text: $viewModel.subject)
}
Section(header: Text("Enter other task details:")) {
TextField("Enter task weighting",
text: $viewModel.weighting)
TextField("Enter total marks",
text: $viewModel.totalMarks)
}
}
Button(action: { // Part of VStack
ViewAssignment()
}, label: {
Text("Create New Task")
.frame(width: 250,
height: 50,
alignment: .center)
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
})
.padding()
}
}
}
}
struct AddAssignment_Previews: PreviewProvider {
static var previews: some View {
AddAssignment()
.preferredColorScheme(.dark)
}
}
首先,按钮没有移动到下一个视图,我收到一条警告说'ViewAssignment'初始化程序的结果未使用'。而且,在另一个视图中连接的属性,文本仍然没有出现。这是另一个视图:
import SwiftUI
struct ViewAssignment: View {
@StateObject var viewModel = FormViewModel()
var body: some View {
VStack {
Text(viewModel.taskName)
.padding()
Image(systemName: "house.fill")
}
}
}
struct ViewAssignment_Previews: PreviewProvider {
static var previews: some View {
ViewAssignment()
}
}
我不知道我应该使用@State 还是@Published,所以我对要查找的错误有点困惑。即使我在另一个视图的表单中输入文本,屏幕上也不会弹出任何文本。
任何帮助将不胜感激,即使有人可以向我指出教程的方向。