我有两个视图,ViewAssignment 和 TaskDetailView。我的 ViewAssignment 页面从环境对象中获取数据,并使用该数据创建一个列表。
单击列表中的每个项目后,TaskDetailView 会作为导航链接弹出,但是,我无法使 TaskDetailView 中的信息对特定迭代(列表中的项目)唯一
我相信问题出在我的 TaskDetailView.swift
import SwiftUI
struct TaskDetailView: View {
@EnvironmentObject var assignment: Assignments
@State var taskNotes = ""
var body: some View {
VStack(spacing: 10) {
Image("english-essay")
.resizable()
.scaledToFit()
.frame(width: 250, height: 160)
.cornerRadius(20)
Text(self.assignment.data.first?.taskName ?? "Untitled Task")
.font(.title2)
.fontWeight(.semibold)
.lineLimit(2)
.multilineTextAlignment(.center)
HStack(spacing: 20) {
Label(self.assignment.data.first?.weighting ?? "0", systemImage: "percent")
.font(.subheadline)
.foregroundColor(.secondary)
Text(self.assignment.data.first?.dueDate ?? "No Date")
.font(.subheadline)
.foregroundColor(.secondary)
}
TextField("Write any notes here", text: $taskNotes)
.font(.body)
.padding()
Spacer()
}
}
}
struct TaskDetailView_Previews: PreviewProvider {
static var previews: some View {
TaskDetailView() // I assume there is some information I have to pass through here
}
}
有关详细信息,这是我的另一种观点:
import SwiftUI
struct ViewAssignment: View {
// Observed to update the UI
@EnvironmentObject var assignment: Assignments
var body: some View {
ZStack {
NavigationView {
List(self.assignment.data) { task in
NavigationLink (
destination: TaskDetailView(),
label: {
Image(systemName: "doc.append.fill")
.scaleEffect(2.5)
.padding()
VStack(alignment: .leading, spacing: 3) {
Text(task.taskName)
.fontWeight(.semibold)
.lineLimit(2)
Text(task.dueDate + " - " + task.subject)
.font(.subheadline)
.foregroundColor(.secondary)
}
})
}
.navigationTitle("My Tasks")
.listStyle(InsetGroupedListStyle())
}
}
}
}
struct ViewAssignment_Previews: PreviewProvider {
static var previews: some View {
ViewAssignment()
}
}
我还想知道,在为列表中的每个项目设置唯一的屏幕后,我是否能够在重新加载应用程序时保存文本字段的内容,也许是通过@AppStorage?感谢您的帮助。