web-dev-qa-db-fra.com

masquer le clavier pour le champ de texte dans le langage de programmation Swift

J'ai peu d'expérience en Objective-C. Je souhaite masquer le clavier d'un champ de texte à l'aide du langage de programmation Swift.

J'ai aussi essayé ça

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

Mais la méthode ne se déclenche pas lorsque je touche retour. Quelqu'un a-t-il de la chance avec ça?

22
user2869947

Je pense que le problème est de définir le délégué.

Veuillez définir délégué textfield à votre ViewController comme ceci

class ViewController: UIViewController,UITextFieldDelegate {

puis créez l'IBOutlet pour votre champ de texte comme ceci

@IBOutlet var txtTest : UITextField = nil

assurez-vous qu'il est connecté à votre champ de texte sur votre vue dans le storyboard.

enfin définir son délégué en utilisant 

txtTest.delegate=self

On a presque fini. Placez maintenant cette fonction de délégué dans votre classe.

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

J'espère que cela résoudra votre problème.

68
Ravi_Parmar

Remplacez simplement la méthode UIViewController appelée "touchesBegan" et définissez endEditing sur true. Juste comme ça:

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

Afin de masquer le clavier lorsque vous avez appuyé sur un bouton, vous devez utiliser la fonction suivante.

self.view.endEditing(true)

Cela fonctionne quand un bouton est enfoncé. 

J'espère que cela aide quelqu'un là-bas. 

8
Ronaldoh1

Et c'est parti:

  1. Ajouter un champ de texte à votre vue
  2. Créer un nouveau fichier Swift
  3. Définir ce nouveau fichier en tant que classe pour cette vue particulière
  4. Ajouter un champ de texte à votre vue
  5. Créez un point de vente pour le champ de texte (mon s'appelle "txtField"!)
  6. Remplacez tout code du fichier Swift Class par ceci:

    import Foundation
    import UIKit
    
    //01 create delegation
    class MyViewController2: UIViewController,UITextFieldDelegate {
    
      @IBOutlet weak var txtField: UITextField!=nil
    
        override func viewDidLoad() {
          super.viewDidLoad()
          // additional setup after loading the view
    
          //02 set delegate to textfield
          txtField.delegate = self
        }
    
        //03 textfield func for the return key
        func textFieldShouldReturn(textField: UITextField) -> Bool {
          txtField.resignFirstResponder()
          return true;
        }
    
        //textfield func for the touch on BG
        override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
          txtField.resignFirstResponder()
          self.view.endEditing(true)
        }
    
        override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          //dispose of any resources that can be recreated
        }
      }
    
    1. Essayez-le, soyez heureux et dites merci!
6
LAOMUSIC ARTS
  • Ajoutez UITextFieldDelegate à la déclaration de classe:

    classe ViewController: UIViewController, UITextFieldDelegate

  • Connectez le champ de texte ou écrivez-le par programme

    @IBOutlet faible var userText: UITextField!

  • définissez votre contrôleur de vue comme le délégué des champs de texte dans la vue s'est chargé:

    override func viewDidLoad() {
    super.viewDidLoad()
    self.userText.delegate = self
    }
    
  • Ajouter la fonction suivante

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

    avec tout cela, votre clavier commencera à disparaître en touchant en dehors du champ de texte et en appuyant sur la touche retour.

2
Satnam Sync
UIApplication.sharedApplication().sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, forEvent:nil)
1
neoneye

Pour masquer simplement le clavier, remplacez simplement la "méthode touchBegan" de UIView. Ainsi, lorsque vous appuyez sur n’importe où dans la vue, le clavier est masqué, voici le code exemple.

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

Comme @spfursich l'a dit, le meilleur moyen est que le clavier disparaisse lorsque l'utilisateur touche au-dessus du clavier. Voici le code:

override func viewDidLoad() {
    super.viewDidLoad()

    var tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "DismissKeyboard")
    self.view.addGestureRecognizer(tap)
}

func DismissKeyboard(){
    self.view.endEditing(true)
}
1
Ajumal

Vous devez d'abord définir delegate pour votre champ de texte, puis vous devez inclure resignFirstResponder() pour masquer le clavier lorsque vous appuyez sur le bouton de retour du clavier.

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

Ici, j'ai résolu le problème suivant: lorsque le clavier s'ouvre et que la vue est masquée derrière le clavier .... il faut modifier les contraintes de l'interface utilisateur de manière dynamique afin de rendre la vue complète visible. Dans mon cas, je change la bottonConstraint de la UITextField de manière dynamique.

Donc, voici le code complet. J'ai un UITextView et UITextField sur UIViewController sur lequel travailler uniquement pour tester ...

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
Rahul Raina

Vous pouvez essayer ce code pour avoir le code d'exécution "clé".

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

func performAction(){

//execute code for your action inside this function

}

J'espère que cela peut vous aider.

0
Bigfoot11

Maintenant, dans Swift 3, les méthodes les plus simples sont

Méthode 1: appelé lorsque la touche 'Retour' est enfoncée.

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

Méthode 2: appelé lorsque la touche 'Retour' est enfoncée.

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

Méthode 3: Méthode globale L'écriture dans la vue s'est chargée

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

Note: N'oubliez pas d'ajouter ceci. Sinon, ce n'est pas un travail.

UIGestureRecognizerDelegate, UITextFieldDelegate

J'espère que ça marchera pour toi :)

0
Anup Gupta

Vous pouvez aussi faire comme ceci: Ajouter l'événement "Did end on exit" de l'inspecteur de connexions de votre TextField

Dans mon exemple, je le connecte à une méthode appelée 'terminée'

déclare l'expéditeur en tant que UITextField, puis appelle sender.resignFirstResponder ();

@IBAction func ended (sender: UITextField){ sender.resignFirstResponder(); }
0
Nikita Kurtin