У меня есть следующий код:Добавление наблюдателей в UITextField Текст изменен
class LoginViewController : UIViewController {
var loginVM :LoginViewModel!
override func viewDidLoad() {
super.viewDidLoad()
loginVM = LoginViewModel(userName: "", password: "")
self.view.backgroundColor = UIColor.white
let userNameTextField = UITextField(frame: CGRect(x: 20, y: 100, width: 100, height: 44))
userNameTextField.backgroundColor = UIColor.red
userNameTextField.addObserver(self, forKeyPath: "text", options: [.new, .old], context: nil)
let passwordTextField = UITextField(frame: CGRect(x: 20, y: 300, width: 100, height: 44))
passwordTextField.backgroundColor = UIColor.blue
self.view.addSubview(userNameTextField)
self.view.addSubview(passwordTextField)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
print("observe Value")
}
}
Из моего понимания функции observeValue будет срабатывать каждый раз, когда я изменить текст UITextField, так как я приложил его к свойству «текст» , Но watchValue не срабатывает.
UPDATE:
Могу ли я отправить редактирования измененное событие метода с моей точки зрения модели:
loginVM = LoginViewModel(userName: "", password: "")
userNameTextField.addTarget(loginVM, action: #selector(loginVM.userNameChanged), for: .editingChanged)
struct LoginViewModel {
var userName :String
var password :String
func userNameChanged(textField :UITextField) {
}
}
Спасибо! Итак, что определяет KVO-наблюдаемое свойство. Как узнать, является ли свойство KVO наблюдаемым или нет. –
Обычно документация будет явно приглашать вас наблюдать любые наблюдаемые свойства KVO. – matt