Как отменить клавиатуру при касании всего приложения

У меня есть несколько текстовых полей в разных 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)
    }
}