У меня есть несколько текстовых полей в нескольких представлениях, и я хочу иметь возможность отбрасывать любой ввод (т. Е. Ничего не делать с тем, что было набрано), если пользователь нажимает вне клавиатуры, чтобы отклонить его.
Как и предлагалось в некоторых постах, я сделал следующее
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, но я мог найти причину, как решить проблему.
Возможно, я неправильно подхожу к вопросу.