UITextField наследуется от UIControl, а значит вы можете подписываться на его controlEvents. Пример:
override func viewDidLoad() {
super.viewDidLoad()
textField.addTarget(self, action: #selector(editingBegan(_:)), for: .editingDidBegin)
textField.addTarget(self, action: #selector(editingChanged(_:)), for: .editingChanged)
textField.addTarget(self, action: #selector(editingEnded(_:)), for: .editingDidEnd)
}
@objc func editingBegan(_ textField: UITextField) {
//пользователь попал в поле, но еще ничего не ввел
}
@objc func editingChanged(_ textField: UITextField) {
//текст изменился
}
@objc func editingEnded(_ textField: UITextField) {
//ввод окончен, к примеру нажали "return" на клавиатуре
}