Swift - How to dismiss number keyboard after tapping outside of the textfield

The best way to add a tap gesture recognizer to the view and calling either resignFirstResponder() or self.view.endEditing(true). I prefer endEditing() since resignFirstResponder has to be done for each text field separately unlike endEditing which is done for the view itself.

In viewDidLoad, write the below code:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: "didTapView")
self.view.addGestureRecognizer(tapRecognizer)

Now write the didTapView method to dismiss the keyboard:

func didTapView(){
  self.view.endEditing(true)
}

Now when you tap outside the keyboard on the main view of the controller, it will call the didTapView method and dismiss the keyboard.

Swift 3.x

The code in viewDidLoad should be:

let tapRecognizer = UITapGestureRecognizer()
tapRecognizer.addTarget(self, action: #selector(ViewController.didTapView))
self.view.addGestureRecognizer(tapRecognizer)

where ViewController should be the name of your view controller.

Thanks


Swift 3 tested and working

 // dismiss keyboard on touch outside textfield
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKind(of: UITextField.self) && txt.isFirstResponder {
                txt.resignFirstResponder()
            }
        }
    }   

Enjoy

Swift 2.3 tested and working

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        for txt in self.view.subviews {
            if txt.isKindOfClass(UITextField.self) && txt.isFirstResponder() {
                txt.resignFirstResponder()
            }
        }
    }

Enjoy


You could also use this method to dismiss the keyboard when pressing 'Return'

func textFieldShouldReturn(textField: UITextField!) -> Bool {
        self.view.endEditing(true);
        return false;
}

Make sure to set your delegate

Tags:

Ios

Xcode

Swift