Ios TextField值将为空,SwiftUI
我正在使用ObserveObject来存储textField的值 这是我在ObserveObject中的代码Ios TextField值将为空,SwiftUI,ios,swift,swiftui,Ios,Swift,Swiftui,我正在使用ObserveObject来存储textField的值 这是我在ObserveObject中的代码 class SignupViewModel: ObservableObject { @Published var fullname = "" @Published var birthday = "" @Published var email = "" @Published var pass
class SignupViewModel: ObservableObject {
@Published var fullname = ""
@Published var birthday = ""
@Published var email = ""
@Published var password = ""
@Published var birthDate = Date()
@Published var isValidEmail = true
@Published var isEmailAlreadyExist = false
@Published var isPassword1 = true
@Published var isPassword2 = true
@Published var isDisable: Bool = false
}
我创建了这样的实例并使用了它们
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 5) {
TextFieldWithoutValidation(text: $signupModel.fullname, placeHolder: "Full name", keyBoardType: .default)
.accentColor(Color.black)
// LabelTextField(title: "Full name", text: $signupModel.fullname, keyboardType: .default, contentType: nil)
// TextField("Full name", text: $data.value)
Text("We’ll use this to issue you a cheque when you make a profit.")
.font(.system(size: 11.0))
}
DateView(titleText: "Birthday", date: $signupModel.birthDate, labelText: $signupModel.birthday)
TextFieldWithoutValidation(text: $signupModel.email, placeHolder: "Email", keyBoardType: .emailAddress)
.accentColor(Color.black)
if !signupModel.isValidEmail {
errorView(.emailNotValid)
}
SecureTextFieldWithoutValidation(text: $signupModel.password, placeHolder: "Password")
.accentColor(Color.black)
if !signupModel.password.isEmpty {
VStack(spacing: 0) {
errorView((signupModel.isPassword1 ? .passwordRight1 : .passwordWrong1))
errorView((signupModel.isPassword2 ? .passwordRight2 : .passwordWrong2))
}
}
createButton()
}
.padding(.leading, 20) // you can use as per your requirement(-16)
.padding(.trailing, 20)
.titleForNavigation("Create your account", displayMode: .large)
.navigationLayout(AnyView(backButton))
}
但是当我在textField中键入内容并转到下一个textField时,上一个textField文本将自动为空
有人能帮我解释一下为什么会发生这样的事情吗?我不确定这个答案是否有用,我可以在一个操场上复制你的例子 在渲染之间和按下“保存”按钮后,对象似乎保持其状态
import PlaygroundSupport
class SignupViewModel: ObservableObject {
@Published var fullname = ""
@Published var birthday = ""
@Published var email = ""
@Published var password = ""
@Published var birthDate = Date()
@Published var isValidEmail = true
@Published var isEmailAlreadyExist = false
@Published var isPassword1 = true
@Published var isPassword2 = true
@Published var isDisable: Bool = false
}
struct ContentView: View {
@ObservedObject var signupModel = SignupViewModel()
var body: some View {
VStack{
Text("Sign up form")
TextField("Name", text: $signupModel.fullname)
TextField("Email", text: $signupModel.email)
TextField("Password", text: $signupModel.password)
Button(action: { print("Form data:"); print("\(signupModel.fullname) \(signupModel.email) \(signupModel.password)") }) {
Text("Save")
}
}
}
}
let viewController = UIHostingController(rootView: ContentView())
PlaygroundPage.current.liveView = viewController
您应该在
视图的文本字段的位置提供更多的代码。我已经更新了我的完整代码,你能帮助我吗?在操场上,我没有看到你所描述的问题,在文本字段之间移动清除了前面的文本字段。另外,打印证明实例包含数据。如果您在操场上运行此代码,您能看到吗?我查看了您更新的代码,但无法复制您的问题,因为代码缺少LabelTextField、DateView、TextField Without Validation和SecureTextFieldWithout Validation的自定义视图可能不需要查看errorView。