Comment faire pour faire disparaître le clavier lorsque l'utilisateur appuyez sur une autre zone à l'extérieur de textfield?
aujourd'hui j'ai essayé d'exécuter mon code sur mon iPod (iOS 6.1.3) et j'ai trouvé quelque chose d'intéressant ici...
tout d'abord, lorsque je tape sur textfield le clavier s'affiche, mais il ne cache pas quand je tape quelque part d'autre en dehors de textfield.
j'ai donc décidé de recherche sur Google et trouvé cette solution :
_fieldEmail.delegate = self;
_fieldEmail.returnKeyType = UIReturnKeyDone;
_fieldPassword.delegate = self;
_fieldPassword.returnKeyType = UIReturnKeyDone;
_fieldRegisterName.delegate = self;
_fieldRegisterName.returnKeyType = UIReturnKeyDone;
_fieldRegisterEmail.delegate = self;
_fieldRegisterEmail.returnKeyType = UIReturnKeyDone;
_fieldRegisterPassword.delegate = self;
_fieldRegisterPassword.returnKeyType = UIReturnKeyDone;
il fonctionne... il donne un bouton "terminer" en bas du clavier, et maintenant, le clavier peut être caché en appuyant sur elle.
mais j'ai 2 problèmes :
- le clavier ne masquer que lorsque l'on "FAIT" le bouton est actionné. pas en appuyant sur une autre zone à l'extérieur de la zone de texte. Je ne sais pas si cela normal sur iOS monde, mais en général, je vois beaucoup d'applications ne pas agir de la sorte.
- est il possible de faire une boucle de ce processus, de sorte que je n'ai pas ajouter manuellement que délégué, un par un de tous les textfield que j'ai? comment faire?
c'est tout j'ai besoin de savoir
- Il y a quelques bonnes réponses [ici][1] [1]: stackoverflow.com/questions/7794959/...
- double possible de iphone, rejeter clavier au toucher et à l'extérieur du champ de texte
Vous devez vous connecter pour publier un commentaire.
Le code ci-dessous fonctionne sur tous les composants dans le UIView pour tous les
UITextField
OU
UIPresentationFormSheet
, cela ne semble pas fonctionner.resignFirstResponder
Dans le viewDidLoad :
Et puis :
2.Vous pourriez sous-classe UITextField mais à moins d'avoir 1000 objets textfield il est ok pour faire comme vous ne le font actuellement.
C'est ce qui concerne Swift de programmation pour Xcode 6.0.1
let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleSingleTap(_:)))
Utiliser
et le code de la méthode
OU _ Et Le meilleur Autre option est
Juste ajouter
Et de la carte clé va se cacher quand vous avez tapé n'importe où à partir de la vue:)
Rejetant le clavier
Ce que j'ai l'habitude de faire, c'est appeler
à partir d'un bouton invisible sur la vue. Je suis sûr que theres une plus belle façon de le faire. Il a été un moment depuis que j'ai fait dans une application.
Simple,
Utilisation IQKeyboardManager et de mettre cette ligne de code dans AppDelegate.m
Voici comment je le fais:
Dans le mavue est .h fichier:
Dans le mavue est .m fichier:
Dans le mavue de l'init de routine:
Dans le mavue textField délégué région, j'ai enregistrer l'id de n'importe quel champ de texte est actuellement à l'activation:
Et dans le mavue est la routine que les routes tout le trafic pour les autres contrôles lorsqu'ils sont accessibles, j'ai un code qui vérifie si un champ de texte a été active et, si l'on a été, il l'appelle à démissionner de son FirstResponder statut et des gouttes puis un nul dans le savedTextField propriété:
Cela fonctionne correctement pour moi.
J'ai rencontré exactement le même problème. Généralement ce que vous voulez, c'est, que, où que vous cliquez à l'intérieur de votre Application (qui est affiché dans votre main /actuel UIView), mais pas sur le clavier pour le fermer. Après recherche sur le web pour une solution intelligente et testé plusieurs, je pense que il est le meilleur pour étendre/sous-classe/mettre en œuvre les UIGestureRecognizerDelegate
Depuis de nombreux contrôles tels que UITableView etc. peut répondre à des gestes (select, le défilement etc.) et si vous ajoutez simplement un UITapGestureRecognizer à l'ensemble de la (principale)ViewController de vue pour fermer le clavier, l'expérience utilisateur n'est pas le meilleur, puisque l'utilisateur doit appuyez deux fois s'il n'avait pas l'intention de fermer le clavier, mais par exemple, sélectionnez une ligne à partir d'un UITableView l'intérieur de l'Application actuelle de "principal" Voir.
Depuis que je suis tout à fait nouvelle à l'ensemble de l'iOS et swift chose et code swift exemples sont rares, voici mon clavier complet de contrôle ciselée:
vous pouvez nid à l'intérieur de la ViewController et appel initiallizeCloseKeyboardTa() dans le viewDidLoad mise en œuvre... Il met également en œuvre un norfication observateur pour recevoir des événements dès que le clavier (fini) être ouvert ou fermé par NSNotificationCenter UIKeyboardDidShowNotification et UIKeyboardDidHideNotification
Espère que sauver d'autres gens un peu de temps 🙂
|*| Rejet de l'objet UITextField du Clavier : remplacement de la méthode touchesBegan:withEvent: pour le ViewController
|OU|
|*| Rejet de l'objet UITextField du Clavier sur induvidual zone de texte :
|*| La mise en œuvre de Cliquez sur le bouton Suivant :
1) Vous allez avoir besoin de définir les balises dans l'augmentation de la séquence des objets textfield dans xib/Storyboard ou dans le code.
2) Définissez le délégué pour chacun des objets textfield.
3) Puis collez le code suivant dans votre vue-contrôleur pour avoir l'effet désiré:
Je pense que
est pratique mais pas la meilleure solution.
et le TapGestureRecongnizer est mieux, mais difficile à utiliser,vous devez définir des délégués et d'ajouter et de supprimer la Recongnizer.
J'ai donc écrit un simple sous-classe qui peut être facilement utilisé:
}
vous devriez préoccupation au sujet de la superview et la cancelTouchesInView propriété.
ou sur GitHub:https://github.com/lilidan/TapHideText/blob/master/TapHideTextField.swift