hide keyboard for text field in swift programming language

后端 未结 14 984
不思量自难忘°
不思量自难忘° 2020-11-27 17:07

I have little experience in Objective-C. I want to hide the keyboard for a text field using the Swift programming language.

I also tried this

func te         


        
相关标签:
14条回答
  • 2020-11-27 17:29

    Like @spfursich said, The best way is, when user touch anywhere above the keyboard the keyboard will disappear. Here is the code :

    override func viewDidLoad() {
        super.viewDidLoad()
    
        var tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DismissKeyboard")
        self.view.addGestureRecognizer(tap)
    }
    
    func DismissKeyboard(){
        self.view.endEditing(true)
    }
    
    0 讨论(0)
  • 2020-11-27 17:29

    In simple way to hide the keyboard just override the UIView "touchBegan method". So when you tap any where in the view keyboard is hide. here is the sample code.. (Swift 3.0 Updated code)

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 
    {
       self.view.endEditing(true)
    }
    
    0 讨论(0)
  • 2020-11-27 17:30

    You can also do like this: add event "Did end on exit" from connections inspector of your TextField and connect it to method from relevant ViewController

    In my example I connect it to method called 'ended'

    declare sender as UITextField and then call sender.resignFirstResponder(); Like this:

    @IBAction func ended (sender: UITextField){ sender.resignFirstResponder(); }
    
    0 讨论(0)
  • 2020-11-27 17:34

    Now In Swift 3/4/5, the easiest methods are

    Method 1: called when 'return' key pressed.

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

    Method 2: called when 'return' key pressed.

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

    Method 3: Global Method Write in view did load

    self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
    

    Note: Don't forget to add this. Other wise its not work.

    UIGestureRecognizerDelegate, UITextFieldDelegate
    

    I hope it will work for you :)

    0 讨论(0)
  • 2020-11-27 17:34

    Here i have solved the problem, that when keypad opens and the view gets hidden behind the keypad.... that time we need to change the UI constraints dynamically in order to make the whole view visible. In my case i am changing the bottonConstraint of the UITextField dynamically.

    So, here goes the complete code. I have one UITextView and UITextField on UIViewController to work on for just testing...

    import UIKit
    
    class ViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate {
    
        @IBOutlet weak var textView: UITextField!
    
        @IBOutlet weak var textField: UITextView!
    
          /*Height Constraint for textField*/
        @IBOutlet weak var bottom: NSLayoutConstraint!
    
        var defaultHeight:CGFloat = 0.0;
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            defaultHeight = bottom.constant;
    
            NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name:UIKeyboardWillShowNotification, object: nil);
    
    
            NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name:UIKeyboardWillHideNotification, object: nil);
    
        }
    
        override func resignFirstResponder() -> Bool {
            textView.resignFirstResponder();
            textField.resignFirstResponder();
            return true;
        }
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            resignFirstResponder()
            print("touched began")
        }
    
        func textViewDidEndEditing(textView: UITextView) {
            resignFirstResponder()
            print("text view did end editing")
        }
    
        func textViewShouldEndEditing(textView: UITextView) -> Bool {
            resignFirstResponder()
            print("text view should end editing")
            return true;
        }
    
        func textFieldShouldReturn(textField: UITextField) -> Bool {
            print("text field should return")
            resignFirstResponder()
            return true;
        }
    
        func textFieldDidEndEditing(textField: UITextField) {
            resignFirstResponder()
            print("did end editing")
        }
    
        func keyboardWillShow(notification: NSNotification) {
            print("keyboard will show.............")
            if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
                let a = keyboardSize.height;
                self.bottom.constant = a + defaultHeight;
                self.view.updateConstraints();
            }
        }
    
        func keyboardWillHide(nofication:NSNotification)
        {
            print("keyboard will hide................")
            bottom.constant = defaultHeight;
            self.view.updateConstraints();
    
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    
    0 讨论(0)
  • 2020-11-27 17:35
    • 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.

    0 讨论(0)
提交回复
热议问题