Binding 迅捷;UITextField ViewModel绑定问题
我正在尝试在SwiftUI中使用UITextField。 我已经为UITextField创建了一个自定义结构,并创建了一个可绑定字符串,用于保存输入文本。 当我试图将输入文本传递回viewModel时,它不起作用。 为了比较,我在代码中放置了SwiftUI文本字段,它可以正常工作 有人能帮忙吗Binding 迅捷;UITextField ViewModel绑定问题,binding,uitextfield,swiftui,viewmodel,textfield,Binding,Uitextfield,Swiftui,Viewmodel,Textfield,我正在尝试在SwiftUI中使用UITextField。 我已经为UITextField创建了一个自定义结构,并创建了一个可绑定字符串,用于保存输入文本。 当我试图将输入文本传递回viewModel时,它不起作用。 为了比较,我在代码中放置了SwiftUI文本字段,它可以正常工作 有人能帮忙吗 import SwiftUI final class RegistrationViewViewModel: ObservableObject { @Published var firstName
import SwiftUI
final class RegistrationViewViewModel: ObservableObject {
@Published var firstName: String = "" {
didSet {
print(oldValue)
}
willSet {
print(newValue)
}
}
@Published var lastName: String = "" {
didSet {
print(oldValue)
}
willSet {
print(newValue)
}
}
func saveData() {
print("Saving...", firstName, lastName)
}
}
struct RegistrationView: View {
@ObservedObject var viewModel = RegistrationViewViewModel()
var body: some View {
VStack(spacing: 50) {
TextField("Last name", text: $viewModel.lastName)
.frame(width: 300, height: 35, alignment: .center)
.border(Color(.systemGray))
CustomTextField(inputText: $viewModel.firstName, placeholder: "First name")
.frame(width: 300, height: 35, alignment: .center)
.border(Color(.systemGray))
Button(action: {
self.viewModel.saveData()
}) {
Text("Submit")
}
}
}
}
struct CustomTextField: UIViewRepresentable {
var inputText: Binding<String>
var placeholder: String
func makeUIView(context: Context) -> UITextField {
let textfield = UITextField(frame: .zero)
textfield.delegate = context.coordinator
textfield.placeholder = placeholder
return textfield
}
func updateUIView(_ uiView: UITextField, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UITextFieldDelegate {
var parent: CustomTextField
init(_ parent: CustomTextField) {
self.parent = parent
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
}
导入快捷界面
最终类注册ViewModel:ObserveObject{
@已发布的var firstName:String=“”{
迪塞特{
打印(旧值)
}
意志{
打印(新值)
}
}
@已发布的变量lastName:String=“”{
迪塞特{
打印(旧值)
}
意志{
打印(新值)
}
}
func saveData(){
打印(“保存…”、姓氏、姓氏)
}
}
结构注册视图:视图{
@ObservedObject var viewModel=RegistrationViewModel()
var body:一些观点{
VStack(间距:50){
TextField(“姓氏”,text:$viewModel.lastName)
.框架(宽:300,高:35,对齐:。中心)
.边框(颜色(.systemGray))
CustomTextField(inputText:$viewModel.firstName,占位符:“First name”)
.框架(宽:300,高:35,对齐:。中心)
.边框(颜色(.systemGray))
按钮(操作:{
self.viewModel.saveData()
}) {
文本(“提交”)
}
}
}
}
结构CustomTextField:UIViewRepresentable{
var输入文本:绑定
变量占位符:字符串
func makeUIView(上下文:context)->UITextField{
设textfield=UITextField(帧:.0)
textfield.delegate=context.coordinator
textfield.placeholder=占位符
返回文本字段
}
func updateUIView(uiView:UITextField,context:context){}
func makeCoordinator()->Coordinator{
协调员(自我)
}
类协调器:NSObject,UITextFieldDelegate{
变量父项:CustomTextField
init(uu父项:CustomTextField){
self.parent=parent
}
func textField应该返回(textField:UITextField)->Bool{
textField.resignFirstResponder()辞职
返回真值
}
}
}
尝试按如下方式设置UpdateUI查看功能:
func updateUIView(_ uiView: UITextField, context: Context) {
uiView.text = inputText
}
尝试按如下方式设置UpdateUI查看函数:
func updateUIView(_ uiView: UITextField, context: Context) {
uiView.text = inputText
}
例如,见。。。这里还有很多其他人,比如。。。这里还有很多其他的问题,只是关于将更新后的文本传递回视图模型。问题是关于将更新后的文本传递回视图模型。