отменить ввод при отклонении клавиатуры с нажатием - PullRequest
0 голосов
/ 09 мая 2018

У меня есть несколько текстовых полей в нескольких представлениях, и я хочу иметь возможность отбрасывать любой ввод (т. Е. Ничего не делать с тем, что было набрано), если пользователь нажимает вне клавиатуры, чтобы отклонить его.

Как и предлагалось в некоторых постах, я сделал следующее

extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }

    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}

и я вызываю self.hideKeyboardWhenTappedAround() в методе viewDidLoad() любого контроллера представления, где я хочу это поведение.

происходит то, что всякий раз, когда клавиатура закрывается, выполняется код, указанный в textFieldDidEndEditing. Я не хочу этого делать, потому что ошибки вызываются, если ввод неправильный, но пользователь отклонил клавиатуру как способ отступить, а не отправлять ввод.

Я думал, что view.endEditing(true) только что вызывал resignFirstResponder() в каждом подпредставлении, но, очевидно, также вызывается textFieldDidEndEditing(). Как мне этого избежать?

Я просматривал множество постов на SO, но я мог найти причину, как решить проблему. Возможно, я неправильно подхожу к вопросу.

1 Ответ

0 голосов
/ 09 мая 2018

Я смог понять свою ошибку.

Логика / код для обработки ввода должна идти в методе textFieldShouldReturn(), который вызывается при нажатии кнопки возврата на клавиатуре. Этот метод не вызывается, если пользователь отклоняет клавиатуру, поскольку не была вызвана кнопка возврата.

Как сказал @Moshe, правильно вызывать метод textFieldDidEndEditing, потому что редактирование закончилось.

Просто поместив логику для обработки ввода отсюда в другой метод, проблема была решена.

Извините за вопрос noob, но я чувствую, что он может помочь всем остальным новичкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...