私の目標は、ユーザーが 1 つのビュー (新しいタスクの追加) でフォームに入力し、[新しいタスクの作成] ボタンを押すと、フォームのデータが別のビュー (割り当ての表示) に引き継がれ、リストの新しいアイテム。このリスト項目には、データの 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 のどちらを使用すべきかよくわからないため、探しているエラーについて少し混乱しています。他のビューのフォームにテキストを入力しても、画面にポップアップするテキストはありません。
誰かが私をチュートリアルの方向に向けることができたとしても、助けていただければ幸いです。