2017-01-15 2 views
-1

У меня есть следующий код:Добавление наблюдателей в 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) { 

    } 
} 

enter image description here

ответ

2

Из моего понимания функция observeValue будет срабатывать каждый раз, когда я изменить текст UITextField

Нет, потому что это не свойство KVO-наблюдаемого.

Всегда ищите то, что встроено для вашего использования. Способ узнать, что текст UITextField Изменился один из них:

  • дать этому UITextField делегат и использовать метод UITextFieldDelegate textField(_:shouldChangeCharactersIn:replacementString:)

  • дать, что UITextField пару целевых действий за его мероприятие UIControl .editingChanged

+0

Спасибо! Итак, что определяет KVO-наблюдаемое свойство. Как узнать, является ли свойство KVO наблюдаемым или нет. –

+0

Обычно документация будет явно приглашать вас наблюдать любые наблюдаемые свойства KVO. – matt

Смежные вопросы