【问题标题】:SwiftUI & UITextField ViewModel Binding problemSwiftUI & UITextField ViewModel 绑定问题
【发布时间】:2020-05-17 17:17:36
【问题描述】:

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

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
        }
    }
}

【问题讨论】:

标签: binding uitextfield swiftui viewmodel textfield


【解决方案1】:

尝试如下设置你的 updateUIView 函数:

func updateUIView(_ uiView: UITextField, context: Context) {
     uiView.text = inputText
}

【讨论】:

  • 问题是关于将更新的文本传递回视图模型。
猜你喜欢
  • 2015-12-19
  • 1970-01-01
  • 2017-12-27
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2011-10-12
  • 2020-08-11
相关资源
最近更新 更多