How do I dismiss the iOS keyboard?

Viewed 91518

I have a UITextfield that i'd like to dismiss the keyboard for. I can't seem to make the keyboard go away no matter what code i use.

16 Answers

To resign any text field in the app

UIApplication.shared.keyWindow?.endEditing(true)

This approach is clean and guarantied to work because the keyWindow is, by definition, the root view of all possible views displaying a keyboard (source):

The key window receives keyboard and other non-touch related events. Only one window at a time may be the key window.

as a last resort

let dummyTextView = UITextView(frame: .zero)
view.addSubview(dummyTextView)
dummyTextView.becomeFirstResponder()
dummyTextView.resignFirstResponder()
dummyTextView.removeFromSuperview()

3 Simple & Swift steps

Add UITextFieldDelegate to your class as below:

class RegisterVC: UIViewController, UITextFieldDelegate {
    //class implementation 
}

in class implementation, add the delegate function textFieldShouldEndEditing::

internal func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true)
    return true
}

and as a last step, set your UITextField(s) delegate(s) to self, in somewhere appropriate. For example, inside the viewDidLoad function:

override func viewDidLoad(){
    super.viewDidLoad()
    myTextField1.delegate = self
    myTextField2.delegate = self
    ..
    ..
}

Now, whenever user hits the return key, keyboard will dismiss.

I prepared an example snippet too, you can check it from here.

  1. Set up the "Did End On Exit" event in Xcode (right click on your text field).

    Screenshot

  2. Realize this method:

    -(IBAction) closeKeyboard:(id) sender {
        [_txtField resignFirstResponder];
    }
    
Related