Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binding 迅捷;UITextField ViewModel绑定问题_Binding_Uitextfield_Swiftui_Viewmodel_Textfield - Fatal编程技术网

Binding 迅捷;UITextField ViewModel绑定问题

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

我正在尝试在SwiftUI中使用UITextField。 我已经为UITextField创建了一个自定义结构,并创建了一个可绑定字符串,用于保存输入文本。 当我试图将输入文本传递回viewModel时,它不起作用。 为了比较,我在代码中放置了SwiftUI文本字段,它可以正常工作 有人能帮忙吗

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
}

例如,见。。。这里还有很多其他人,比如。。。这里还有很多其他的问题,只是关于将更新后的文本传递回视图模型。问题是关于将更新后的文本传递回视图模型。