How to hide keyboard in swift on pressing return key?

IosSwiftUitextfield

Ios Problem Overview


I am using UITextfied while clicking on textfied keyboard appear but when i pressed the return key, keyboard is not disappearing. I used the following code:

func textFieldShouldReturn(textField: UITextField!) -> Bool // called when 'return' key pressed. return NO to ignore.
{
    return true;
}

the method resignfirstresponder is not getting in function.

Ios Solutions


Solution 1 - Ios

You can make the app dismiss the keyboard using the following function

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

Here is a full example to better illustrate that:

//
//  ViewController.swift
//
//
 
import UIKit
 
class ViewController: UIViewController, UITextFieldDelegate {
 
    @IBOutlet var myTextField : UITextField
                            
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        self.myTextField.delegate = self
    }
 
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        self.view.endEditing(true)
        return false
    }
}

Code source: http://www.snip2code.com/Snippet/85930/swift-delegate-sample

Solution 2 - Ios

The return true part of this only tells the text field whether or not it is allowed to return.
You have to manually tell the text field to dismiss the keyboard (or what ever its first responder is), and this is done with resignFirstResponder(), like so:

// Called on 'Return' pressed. Return false to ignore.

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
    textField.resignFirstResponder()
    return true
}

Solution 3 - Ios

Swift 4.2 - No Delegate Needed

You can create an action outlet from the UITextField for the "Primary Action Triggered" and resign first responder on the sender parameter passed in:

Create Action Outlet

@IBAction func done(_ sender: UITextField) {
    sender.resignFirstResponder()
}

Super simple.

(Thanks to Scott Smith's 60-second video for tipping me off about this: https://youtu.be/v6GrnVQy7iA)

Solution 4 - Ios

  • Add UITextFieldDelegate to the class declaration:

     class ViewController: UIViewController, UITextFieldDelegate
    
  • Connect the textfield or write it programmatically

     @IBOutlet weak var userText: UITextField!
    
  • set your view controller as the text fields delegate in view did load:

     override func viewDidLoad() {
     super.viewDidLoad()
     self.userText.delegate = self
     }
    
  • Add the following function

     func textFieldShouldReturn(userText: UITextField!) -> Bool {
         userText.resignFirstResponder()
         return true;
     }
    

with all this your keyboard will begin to dismiss by touching outside the textfield aswell as by pressing return key.

Solution 5 - Ios

I hate to add the same function to every UIViewController. By extending UIViewController to support UITextFieldDelegate, you can provide a default behavior of "return pressed".

extension UIViewController: UITextFieldDelegate{
    public func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true;
    }
}

When you create new UIViewController and UITextField, all you have to do is to write one line code in your UIViewController.

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

You can even omit this one line code by hooking delegate in Main.storyboard. (Using "ctrl" and drag from UITextField to UIViewController)

Solution 6 - Ios

Simple Swift 3 Solution: Add this function to your view controllers that feature a text field:

@IBAction func textField(_ sender: AnyObject) {
    self.view.endEditing(true);
}

Then open up your assistant editor and ensure both your Main.storyboard is on one side of your view and the desired view controller.swift file is on the other. Click on a text field and then select from the right hand side utilities panel 'Show the Connection Inspector' tab. Control drag from the 'Did End on Exit' to the above function in your swift file. Repeat for any other textfield in that scene and link to the same function.

Solution 7 - Ios

@RSC

for me the critical addition in Xcode Version 6.2 (6C86e) is in override func viewDidLoad()

 self.input.delegate = self;

Tried getting it to work with the return key for hours till I found your post, RSC. Thank you!

Also, if you want to hide the keyboard if you touch anywhere else on the screen:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        self.view.endEditing(true);
    }

Solution 8 - Ios

To get automatic keyboard dismissal, I put this code inside one of the methods of my custom text field's class:

textField.addTarget(nil, action:"firstResponderAction:", forControlEvents:.EditingDidEndOnExit)

Substitute your outlet's name for textField.

Solution 9 - Ios

Another way of doing this which mostly uses the storyboard and easily allows you to have multiple text fields is:

@IBAction func resignKeyboard(sender: AnyObject) {
    sender.resignFirstResponder()
}

Connect all your text fields for that view controller to that action on the Did End On Exit event of each field.

Solution 10 - Ios

Here's the Swift 3.0 update to peacetype's comment:

textField.addTarget(nil, action:Selector(("firstResponderAction:")), for:.editingDidEndOnExit)

Solution 11 - Ios

I would sugest to init the Class from RSC:

import Foundation
import UIKit

// Don't forget the delegate!
class ViewController: UIViewController, UITextFieldDelegate {

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

@IBOutlet var myTextField : UITextField?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    
    self.myTextField.delegate = self;
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

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

}

Solution 12 - Ios

When the user taps the Done button on the text keyboard, a Did End On Exit event will be generated; at that time, we need to tell the text field to give up control so that the keyboard will go away. In order to do that, we need to add an action method to our controller class. Select ViewController.swift add the following action method:

@IBAction func textFieldDoneEditing(sender: UITextField) {
sender.resignFirstResponder()}

Select Main.storyboard in the Project Navigator and bring up the connections inspector. Drag from the circle next to Did End On Exit to the yellow View Controller icon in the storyboard and let go. A small pop-up menu will appear containing the name of a single action, the one we just added. Click the textFieldDoneEditing action to select it and that's it.

Solution 13 - Ios

Swift 3

Add this code below to your VC

//hide keyboard when user tapps on return key on the keyboard
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    self.view.endEditing(true);
    return false;
}

Works for me

Solution 14 - Ios

override func viewDidLoad() {
    super.viewDidLoad()
    
    let tap = UITapGestureRecognizer(target: self, action: #selector(handleScreenTap(sender:)))
    self.view.addGestureRecognizer(tap)}

then you use this function

func handleScreenTap(sender: UITapGestureRecognizer) {
    self.view.endEditing(true)
}

Solution 15 - Ios

Swift

Using optional function from UITextFieldDelegate.

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    return textField.endEditing(false)
}

false means that field can be ask to resign. true – force resign.

Solution 16 - Ios

Make sure that your textField delegate is set to the view controller from which you are writing your textfield related code in.

self.textField.delegate = self

Solution 17 - Ios

you can put this anywhere but not in a UIButton

 func TextFieldEndEditing(text fiend name: UITextField!) -> Bool
{
    return (false)
}

then you can put this code in a button(also for example):

self.view.endEditing(true)

this worked for me

Solution 18 - Ios

In the view controller you are using:

//suppose you are using the textfield label as this

@IBOutlet weak var emailLabel: UITextField!
@IBOutlet weak var passwordLabel: UITextField!

//then your viewdidload should have the code like this
override func viewDidLoad() {
        super.viewDidLoad()
        
        self.emailLabel.delegate = self
        self.passwordLabel.delegate = self

    }

//then you should implement the func named textFieldShouldReturn
 func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }

// -- then, further if you want to close the keyboard when pressed somewhere else on the screen you can implement the following method too:

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

Solution 19 - Ios

you should connect the UITextfied with a delegate of view controller to make this function called

Solution 20 - Ios

All in One Hide Keyboard and Move View on Keyboard Open: Swift 5

override func viewDidLoad() {
    super.viewDidLoad()
    let tap = UITapGestureRecognizer(target: self, action: #selector(taped))
    view.addGestureRecognizer(tap)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(KeyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}


   override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}
 @objc func taped(){
    
    self.view.endEditing(true)
    
}

@objc func KeyboardWillShow(sender: NSNotification){
    
    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y == 0{
        self.view.frame.origin.y -= keyboardSize.height
    }
    
    
}

@objc func KeyboardWillHide(sender : NSNotification){
    
    let keyboardSize : CGSize = ((sender.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size)!
    if self.view.frame.origin.y != 0{
        self.view.frame.origin.y += keyboardSize.height
    }
    
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAshwinkumar MangrulkarView Question on Stackoverflow
Solution 1 - IosrscView Answer on Stackoverflow
Solution 2 - IosMick MacCallumView Answer on Stackoverflow
Solution 3 - IosMark MoeykensView Answer on Stackoverflow
Solution 4 - IosCodetardView Answer on Stackoverflow
Solution 5 - IosWu Yuan ChunView Answer on Stackoverflow
Solution 6 - IoselarcoirisView Answer on Stackoverflow
Solution 7 - IosTobias F. MeierView Answer on Stackoverflow
Solution 8 - IospeacetypeView Answer on Stackoverflow
Solution 9 - IosJames ThompsonView Answer on Stackoverflow
Solution 10 - IosDarth FlyeaterView Answer on Stackoverflow
Solution 11 - IosLAOMUSIC ARTSView Answer on Stackoverflow
Solution 12 - IosIan Seth ColinView Answer on Stackoverflow
Solution 13 - IosGilad BrunfmanView Answer on Stackoverflow
Solution 14 - IosSanti RibeiroOView Answer on Stackoverflow
Solution 15 - IosdimpiaxView Answer on Stackoverflow
Solution 16 - IosMiladinhoView Answer on Stackoverflow
Solution 17 - IosBlake ScottView Answer on Stackoverflow
Solution 18 - Ioskanishk vermaView Answer on Stackoverflow
Solution 19 - IosAbdulrahman MasoudView Answer on Stackoverflow
Solution 20 - IosImran RasheedView Answer on Stackoverflow