Je sais que je dois dire à mon UITextField de démissionner du premier répondeur lorsque je veux démonter le clavier, mais je ne sais pas comment savoir quand l'utilisateur a appuyé sur la touche "Terminé" du clavier. Y a-t-il une notification que je peux surveiller?
181
Réponses:
J'ai mis le délégué de la
UITextField
à maViewController
classe.Dans cette classe, j'ai implémenté cette méthode comme suit:
la source
NO
au lieu deYES
?NO
vous évitez d'ajouter une ligne retour au texte.Si vous connectez l'événement DidEndOnExit du champ de texte à une action (IBAction) dans InterfaceBuilder, il sera envoyé lorsque l'utilisateur rejette le clavier (avec la touche de retour) et l'expéditeur sera une référence à UITextField qui a déclenché l'événement.
Par exemple:
Ensuite, dans InterfaceBuilder, liez l'événement DidEndOnExit du champ de texte à cette action sur votre contrôleur (ou tout ce que vous utilisez pour lier des événements à partir de l'interface utilisateur). Chaque fois que l'utilisateur entre du texte et rejette le champ de texte, le contrôleur recevra ce message.
la source
Vous pouvez également créer une méthode dans votre contrôleur
puis dans l'inspecteur de connexion dans IB, connectez l'événement «Did End On Exit».
la source
DidEndOnExit
événement, vous n'avez pas besoin d'appelerresignFirstResponder
. Vous pouvez tester cela en mettant un point d'arrêt symbolique[UIResponder resignFirstResponder]
. Notez que même si vous n'appelez pas resignFirstResponder, il est toujours appelé par le système. Ceci est expliqué dans l'excellent (s) livre (s) de Matt Neuburg: apeth.com/iOSBookkubi, merci. Votre code a fonctionné. Juste pour être explicite (pour les débutants comme) comme vous le dites, vous devez définir le
UITextField
'sdelegate
pour être égal au ViewController dans lequel le champ de texte réside. Vous pouvez le faire où bon vous semble. J'ai choisi laviewDidLoad
méthode.la source
delegate
. Vous n'êtes pas obligé de le faire par programme, comme illustré ci-dessus. Les deux approches fonctionnent très bien.Voici une astuce pour obtenir un comportement de renvoi automatique du clavier sans code du tout. Dans la pointe, modifiez l'objet proxy Premier répondeur dans l'inspecteur d'identité, en ajoutant une nouvelle action de premier répondant; appelons ça
dummy:
. Reliez maintenant l'événement Did End on Exit du champ de texte à l'dummy:
action de l'objet proxy First Responder. C'est tout! Étant donné que l'événement Did End on Exit du champ de texte a maintenant une paire action-cible, le champ de texte ferme automatiquement son clavier lorsque l'utilisateur appuie sur Retour; et comme il n'y a pas de pénalité pour ne pas trouver de gestionnaire pour un message envoyé dans la chaîne de répondeurs, l'application ne plante pas même s'il n'y a aucune implémentation dedummy:
nulle part.la source
Il suffit d'ajouter
où vous souhaitez désactiver le clavier et afficher la vue du sélecteur.
la source
Dans Swift, vous pouvez écrire une IBAction dans le contrôleur et définir l' événement Did End On Exit du champ de texte sur cette action
la source
Swift 4.2
et cela fonctionnera à 100%la source
Vous pouvez aussi utiliser
Le meilleur si vous avez de nombreux champs Uitext:
la source
Voici ce que j'ai dû faire pour le faire fonctionner, et je pense que c'est nécessaire pour toute personne possédant un pavé numérique pour un clavier (ou tout autre sans bouton terminé:
J'ai créé une fonction appelée
Cela a également été défini dans le fichier .h.
Après cela, j'ai lié au bit «touch down» pour le ViewController dans Interface Builder.
Dans la fonction 'background is taped', je mets ceci:
N'oubliez pas de remplacer 'answerField' par le nom de l'UITextField dont vous souhaitez supprimer le clavier (assurez-vous évidemment que votre UITextField est défini comme ci-dessous :)
Je sais que ce sujet est probablement mort il y a longtemps ... mais j'espère que cela aidera quelqu'un, quelque part!
la source
Vous remarquerez que la méthode "textFieldShouldReturn" fournit l'objet de champ de texte qui a appuyé sur la touche DONE. Si vous définissez le TAG, vous pouvez activer ce champ de texte. Ou vous pouvez suivre et comparer le pointeur de l'objet avec une valeur de membre stockée par son créateur.
Ma démarche est la suivante pour une auto-apprentissage:
En attendant, je mets le test de «validation» qui nie la démission qui suit. Ce n'est qu'à titre d'illustration, donc si l'utilisateur tape NON! sur le terrain, il ne rejettera pas. Le comportement était comme je le voulais, mais la séquence de sortie n'était pas comme je m'y attendais.
Voici ma sortie NSLog pour ce refus suivi de l'acceptation. Vous remarquerez que je retourne le résultat de la démission, mais je m'attendais à ce qu'il me retourne FALSE pour faire rapport à l'appelant?! En dehors de cela, il a le comportement nécessaire.
la source
Voici une façon assez propre de terminer l'édition avec la clé de retour ou une touche en arrière-plan.
Dans le générateur d'interface, intégrez vos champs dans une vue de la classe UIFormView
Que signifie cette classe:
Voici le code:
Interface
la mise en oeuvre
En sous-classant le formulaire et en remplaçant la
textFieldValueIsValid:
méthode, vous pouvez éviter la fin de l'édition si la valeur n'est pas correcte pour le champ donné.Si un champ a un délégué défini dans Interface Builder, le formulaire ne le change pas. Je ne vois pas beaucoup de raisons de définir un délégué différent dans un domaine particulier, mais pourquoi pas…
Il existe de nombreuses façons d'améliorer cette classe de vue de formulaire - Joindre un délégué, faire une mise en page, gérer le moment où les claviers couvrent un champ (en utilisant le cadre currentEditingTextField), démarrer automatiquement l'édition pour le champ suivant, ...
Je le garde personnellement dans mon framework, et je le sous-classe toujours pour ajouter des fonctionnalités, il est assez souvent utile "tel quel".
J'espère que cela aidera. Salut à tous
la source
si vous voulez toute l'édition de dans un UIViewController, vous pouvez utiliser.
et si vous voulez ignorer un masque UITextField correspondant, utilisez.
1. ajoutez un délégué dans votre viewcontroller.h
rendre la délégation impossible à votre champ de texte.
self.yourTextField.delegate = self;
ajoutez cette méthode dans votre viewcontroller.
- (BOOL) textFieldShouldEndEditing: (UITextField *) textField {[textField resignFirstResponder]; retour OUI;}
la source
Définir par programme le délégué de UITextField dans swift 3
Implémentez UITextFieldDelegate dans votre fichier ViewController.Swift (par exemple, la classe ViewController: UIViewController, UITextFieldDelegate {)
// Marque: - gestion du délégué textField ..
la source
Créez une fonction hidekeyboard et liez-la au champ de texte dans le fichier .xib et sélectionnez DidEndOnExit
la source
Si vous avez créé la vue à l'aide d'Interface Builder, utilisez ce qui suit: Créez simplement une méthode,
Cliquez avec le bouton droit de la souris sur le champ de texte dans la vue, définissez l'événement comme Did End on Exit, et connectez-le à la méthode «ignoreKeyboard».
Le meilleur guide pour les débutants est "Head First iPhone and iPad Development, 2nd Edition"
la source
essaye ça
la source
la source
Quiconque recherche Swift 3
1) Assurez-vous que le délégué de votre UITextField est câblé à votre ViewController dans le Storyboard
2) Implémentez UITextFieldDelegate dans votre fichier ViewController.Swift (par exemple la classe ViewController: UIViewController, UITextFieldDelegate {)
3) Utilisez la méthode déléguée ci-dessous
la source
Voici comment je supprime le clavier dans Swift 4.2 et cela fonctionne pour moi:
la source
Swift 3, iOS 9+
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD: Cela fonctionne toujours bien pour moi. Je pense que le gars qui a consacré cette réponse n'a tout simplement pas compris qu'il devait lier cette action au UITextField au storyboard.
la source
la source