TextField复制SwiftUI中相同的所有字段
当我在其中一个文本字段中键入一些文本时,不知何故,它会同时向所有文本字段添加相同的文本。我试图将它们彼此分开,以便正确分配它们TextField复制SwiftUI中相同的所有字段,swiftui,Swiftui,当我在其中一个文本字段中键入一些文本时,不知何故,它会同时向所有文本字段添加相同的文本。我试图将它们彼此分开,以便正确分配它们 struct CardInfo : View { @State var creditCard : CreditCard @State var isSaved: Bool = false @State private(set) var text = "" var body: some View { VSt
struct CardInfo : View {
@State var creditCard : CreditCard
@State var isSaved: Bool = false
@State private(set) var text = ""
var body: some View {
VStack {
CustomTextField(data: $text, tFtext: "Kartin Uzerindeki Isim", tFImage: "user")
.textContentType(.givenName)
.onReceive(Just(text)) { data in
self.creditCard.cardOwnerName = self.text
}
CustomTextField(data: $text, tFtext: "Kredi Kart Numarasi", tFImage: "credit")
.textContentType(.oneTimeCode)
.keyboardType(.numberPad)
.onReceive(Just(text)) { data in
self.creditCard.cardNumber = self.text
}
您需要为每个
文本字段使用单独的@State
变量:
struct CardInfo : View {
@State var creditCard : CreditCard
@State var isSaved: Bool = false
@State private(set) var cardOwnerName = ""
@State private(set) var cardNumber = ""
var body: some View {
VStack {
CustomTextField(data: $cardOwnerName, tFtext: "Kartin Uzerindeki Isim", tFImage: "user")
.textContentType(.givenName)
.onReceive(Just(cardOwnerName)) { data in
self.creditCard.cardOwnerName = data
}
CustomTextField(data: $cardNumber, tFtext: "Kredi Kart Numarasi", tFImage: "credit")
.textContentType(.oneTimeCode)
.keyboardType(.numberPad)
.onReceive(Just(cardNumber)) { data in
self.creditCard.cardNumber = data
}
...
}
}
}
这是因为所有文本字段都使用相同的@State
变量text
。如果在一个文本字段中键入内容,它将更新变量,而该变量将更新其他文本字段,因为它们依赖于同一个变量。pawello2222的答案包含了解决方案。
struct CardInfo : View {
@State var creditCard : CreditCard
@State var isSaved: Bool = false
@State private(set) var cardOwnerName = ""
@State private(set) var cardNumber = ""
var body: some View {
VStack {
CustomTextField(data: $cardOwnerName, tFtext: "Kartin Uzerindeki Isim", tFImage: "user")
.textContentType(.givenName)
.onReceive(Just(cardOwnerName)) { data in
self.creditCard.cardOwnerName = data
}
CustomTextField(data: $cardNumber, tFtext: "Kredi Kart Numarasi", tFImage: "credit")
.textContentType(.oneTimeCode)
.keyboardType(.numberPad)
.onReceive(Just(cardNumber)) { data in
self.creditCard.cardNumber = data
}
...
}
}
}