Как отменить клавиатуру при касании всего приложения
У меня есть несколько текстовых полей в разных viewControllers, где клавиатура всплывает.
Я знаю, как убирать клавиатуру, когда пользователь нажимает на другую часть экрана, но я не хочу идти и жестко кодировать ее во все уголки моего приложения.
Так или иначе, чтобы заставить клавиатуру закрывать клавиатуру повсюду в приложении, когда пользователь нажимает в любом месте экрана, кроме клавиатуры?
Я думал о расширении UIViewController, но у меня также есть некоторые текстовые поля внутри представления, которое я добавляю как подвью. Может быть, может быть, что я расширяю класс TextField?
Ответы
Ответ 1
Я предлагаю создать base UIViewController
и позволить каждому из ваших ViewControllers наследовать его; переопределить метод touchBegan в нем:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
view.endEditing(true)
}
ИЛИ вы можете переопределить viewDidLoad в базовом ViewController и добавить UITapGestureRecognizer
в представление, как показано ниже:
override func viewDidLoad() {
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(Base.endEditing))
view.addGestureRecognizer(tapGesture)
}
func endEditing() {
view.endEditing(true)
}
Ответ 2
Вы также можете использовать расширение контроллера вида, если вы хотите, чтобы увольнение клавиатуры применялось ко всем из них:
extension UIViewController {
open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
}