前提・実現したいこと
@Stateのような状態によって画面描画される編集可能なリストを実装したい。
該当のソースコード
Swift
1#モデル作成 2struct ListModel { 3 var text: String 4 var value: String 5} 6#行作成 7struct ListRow: View { 8 @Binding var model: ListModel 9 var body: some View { 10 HStack{ 11 TextField.init("Memo", text: self.$model.text) 12 Text(model.value) 13 } 14 } 15} 16# 17struct ContentView: View { 18 @State var data: [ListModel] = [ 19 ListModel(value:"123", text: ""), 20 ListModel(value:"456",text: ""), 21 ListModel(value:"789",text: "") 22 ] 23 #構造体配列に要素を追加するテスト処理 24 func test(){ 25 data.append(ListModel(value: "987", text: "")) 26 } 27 28 var body: some View { 29 VStack { 30 #要素追加ボタンの作成 31 Button(action: 32 { 33 test() 34 }, label: { 35 Text("Button") 36 }) 37 #リスト表示 38 List { 39 ForEach(self.data.indices, id: .self) { index in 40 ListRow.init(model: self.$data[index]) { 41 } 42 } 43 } 44 } 45 } 46}
試したこと
@Stateを@ObservableObjectに変更して対応しようとしてのですが、うまく動かず手詰まりな状態です。
補足情報(FW/ツールのバージョンなど)
Xcode 12.5.1
iOS 14.0向け
だいたい動くように見えますが、問題はその先で何をしたいかでしょうね…。
目指している形はアイテムを配列に追加すると、リアルタイムでリスト形式でアイテムが表示され、かつリストのアイテムに対してTextFieldを用いて個別でメモが出来る。というものです。
現状はご認識の通りエラーもなく動きはするのですが、リアルタイムで表示がされない状態です。知見があればご教授頂きたいです。
リアルタイムで表示がされない状態というのがよく分かりませんが、現状はリスト上で編集できて、編集じゃない項目は編集したまま残ってるのではないでしょうか。
(自分が想像する「その先」は、画面遷移して戻ってきたときにもちゃんとリストが保持されるとか、リストをどこかに保存してアプリを立ち上げ直したら保存した内容を読み込んで表示できるとかです。)
回答1件
あなたの回答
tips
プレビュー