Как отследить состояние textField?
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" на клавиатуре
    }
Проще написать не просто функцию, а сделать @IBAction, для которого через StoryBoard указать, после какого события он должен сработать:
- EditingDidBegin,
- EditingDidEnd,
и др... - какой нужен.
