Nikolay Blokhin Facebook Nikolay Blokhin Photos Nikolay Blokhin Linkedin Nikolay Blokhin Twitter

Hi, I'm Nikolay Blokhin I build the cool things with Python and Swift

UITextField: событие изменения текста

Часто нужно оперативно реагировать на ввод пользователя, не дожидаясь когда он нажмет «ok», «enter» и т.п.

Чтобы получать событие (event) о вводе нового символа в поле ввода достаточно нескольких строк:

  1. добавить к определинию класса:
    UITextFieldDelegate
  2. в методе viewDidLoad указать делегата для этого поля:
    textField.delegate = self
    
  3. повесить обработчик на событие:
    textField.addTarget(self, action: "textFieldDidChange:", forControlEvents: UIControlEvents.EditingChanged)
    
  4. определить обработчик (функцию, которая будет вызываться при изменении текстового поля):
    func textFieldDidChange(textField: UITextField) {
        // имплементация обработчика
    }
    

Этого достаточно. Теперь при вводе каждого нового символа будет вызываться наша функция, можно будет, например, реагировать на неправильный пользовательский ввод (вводит буквы в zip-код или номер телефона).

И поскольку мы уже определили что наш класс ответственен за обработку событий этого поля (UITextFieldDelegate), то нам доступны и такие ивенты (добавьте их как методы класса):

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    print("TextField should change characters method called")
    return true
}

func textFieldDidBeginEditing(textField: UITextField) {
    print("TextField did begin editing method called")
}

func textFieldDidEndEditing(textField: UITextField) {
    print("TextField did end editing method called")
}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    print("TextField should begin editing method called")
    return true
}

func textFieldShouldClear(textField: UITextField) -> Bool {
    print("TextField should clear method called")
    return true
}

func textFieldShouldEndEditing(textField: UITextField) -> Bool {
    print("TextField should snd editing method called")
    return true
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
    print("TextField should return method called")
    textField.resignFirstResponder()
    return true
}