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?
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.
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)
}
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.
Et c'est parti:
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
}
}
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.
UIApplication.sharedApplication().sendAction(#selector(UIResponder.resignFirstResponder), to:nil, from:nil, forEvent:nil)
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)
}
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)
}
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;
}
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()
}
}
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.
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 :)
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(); }