2016-10-05 2 views
4

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

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

Так есть в любом случае для обеспечения клавиатуры становится клавиатура уволенным везде на приложении, когда пользователь нажимает в любом месте на экране, кроме клавиатуры?

Я думал о расширении UIViewController, но у меня также есть текстовые поля внутри представления, которое я добавляю в качестве подвью. Возможно, может быть, что я расширяю класс TextField?

ответ

4

Я предлагаю создать базу UIViewController и позволить каждому из ваших ViewControllers наследовать его; переопределить touchesBegan метод в нем:

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

Это также можно сделать через Swift Extensions с нулевыми затратами. Вам не нужно реорганизовывать весь ваш 'UIViewController' – midori

+0

. Представьте, что у меня есть viewController, у которого есть кнопка. И я нажимаю на эту кнопку, которая, очевидно, является подпунктом viewController. Тогда viewController больше не будет загружаться, так что клавиатура все еще там. Я прав? – Honey

+0

Нажатие на кнопку НЕ вызывает touchhesBegan, вы можете решить эту проблему, добавив в действие кнопки «view.endEditing (true)». @IBAction func buttonTapped (отправитель: AnyObject) { view.endEditing (true) } –

3

Вы также можете использовать расширение контроллера вида, если вы хотите, чтобы увольнение с клавиатуры было применимо ко всем из них:

extension UIViewController { 
    open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.view.endEditing(true) 
    } 
}