我需要在SwiftUI中使用UITextField,并且我可以使用绑定变量将UITextField中的文本更改发布到我的视图模型.
但我做不到opposite米.我希望能够在我在ViewModel中发布的变量发生更改时更新UITextfield.因为有时我希望能够用我从互联网上获取的数据自动填充文本字段.
struct Test: View {
@StateObject private var vm = TestVM()
var body: some View {
UIKitField(text: $vm.text)
.onAppear {
vm.fetchData()
}
}
}
class TestVM: ObservableObject {
@Published var text = ""
func fetchData() {
text = "abc" // here I want textfield's text to be updated.
}
}
struct UIKitField: UIViewRepresentable {
@Binding var text: String
private let textField = UITextField()
func makeUIView(context: Context) -> UITextField {
return textField
}
func updateUIView(_ uiView: UITextField, context: Context) {}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
final class Coordinator: NSObject {
private let parent: UIKitField
init(_ parent: UIKitField) {
self.parent = parent
super.init()
self.parent.textField.addTarget(self, action: #selector(editingChanged), for: .editingChanged)
}
@objc func editingChanged() {
parent.text = parent.textField.text!
}
}
}