我正在尝试制作一个编辑 value 的 UITextView currentDisplayedAddress
。该值也被其他视图更改,我希望 UITextView 在发生这种情况时更新其文本。
视图正确初始化,我可以毫无问题地进行编辑并触发相关的视图更新currentDisplayedAddress
。AddressTextField
但是,当值被其他视图更改时,textField 的文本不会更改,即使textField.text
在内部打印正确的更新值updateUIView
并且其他视图也会相应更新。
我不知道是什么原因造成的。非常感谢任何帮助。
struct AddressTextField: UIViewRepresentable {
private let textField = UITextField(frame: .zero)
var commit: () -> Void
@EnvironmentObject var userData: UserDataModel
func makeUIView(context: UIViewRepresentableContext<AddressTextField>) -> UITextField {
textField.text = self.userData.currentDisplayedAddress
textField.delegate = context.coordinator
return textField
}
func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<AddressTextField>) {
if self.textField.text != self.userData.currentDisplayedAddress {
DispatchQueue.main.async {
self.textField.text = self.userData.currentDisplayedAddress
}
}
}
(...)
func makeCoordinator() -> Coordinator { Coordinator(self) }
class Coordinator: NSObject, UITextFieldDelegate {
var addressTextField: AddressTextField
func textFieldShouldReturn(_ textField: UITextField) -> Bool { //delegate method
textField.resignFirstResponder()
addressTextField.userData.currentDisplayedAddress = textField.text ?? String()
addressTextField.commit()
return true
}
}
}