[英]How to get SwiftUI TextField to show numbers but also accept an empty value
[英]How to get textField values in the list swiftui
我以這種方式使用列表,我想在單擊提交按鈕時發送所有TextField值。
我的問題是我無法在列表中獲取 TextField 值
我在項目中也使用了mvvm架構
我在項目中的代碼:
我的型號:
import Foundation
import SwiftUI
struct MyModel : Identifiable {
var id:Int64
var title:String
@State var value:String
}
我的視圖模型:
import Foundation
import SwiftUI
class MyViewModel: ObservableObject {
@Published var items:[MyModel] = []
init() {
populateItem()
}
func populateItem(){
self.items.append(MyModel(id: 0, title: "title #1", value: ""))
self.items.append(MyModel(id: 1, title: "title #2", value: ""))
self.items.append(MyModel(id: 2, title: "title #3", value: ""))
self.items.append(MyModel(id: 3, title: "title #4", value: ""))
self.items.append(MyModel(id: 4, title: "title #5", value: ""))
self.items.append(MyModel(id: 5, title: "title #6", value: ""))
}
}
我的看法 :
import SwiftUI
struct ContentView: View {
@ObservedObject var myViewModel = MyViewModel()
var body: some View {
VStack {
List {
ForEach(self.myViewModel.items) {item in
HStack {
Text(item.title)
TextField("value", text: item.$value)
}
}
}
Button(action: {
print(self.myViewModel.items[0].value)
}){
Text("Submit")
}.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
首先從模型的value
屬性中刪除@State
屬性包裝器。 並使用下一個代碼更新您的 ForEach:
ForEach(self.myViewModel.items.indices, id:\.self) { index in
HStack {
Text(self.myViewModel.items[index].title)
TextField("value", text: Binding(
get: {
return self.myViewModel.items[index].value
},
set: { newValue in
return self.myViewModel.items[index].value = newValue
}))
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.