À l'aide de “Next”, comme une Touche de Retour
J'utilise le "Prochain" de la valeur pour la "Touche Retour" pour obtenir le bouton Suivant à la place du bouton Terminé, mais (évidemment) en appuyant sur n'est pas automatiquement passer à la prochaine UITextField de mon point de vue.
Quelle est la bonne façon de le faire? J'ai vu beaucoup de réponses, mais quelqu'un a une solution swift?
Vous devez vous connecter pour publier un commentaire.
Assurez-vous que votre champs de texte ont leur délégué de définir et de mettre en œuvre la
textFieldShouldReturn
méthode. C'est la méthode qui est appelée lorsque l'utilisateur appuie sur la touche retour (peu importe à quoi elle ressemble).La méthode pourrait ressembler à quelque chose comme ceci:
La logique réelle peut varier. Il existe de nombreuses approches, et je serais certainement conseiller à l'encontre d'un massif
if
/else
chaîne si vous avez beaucoup de champs de texte, mais l'essentiel ici est de déterminer ce que la vue actuellement active afin de déterminer ce que la vue devient actif. Une fois que vous avez déterminé ce qui doit devenir active, à l'appel de la vuebecomeFirstResponder
méthode.Pour certains code de la propreté, vous pourriez envisager une
UITextField
extension qui ressemble à quelque chose comme ceci:Et puis changer notre
textFieldShouldReturn
méthode pour ressembler à ceci:Une fois que vous avez fait cela, elle doit simplement être une question de réglage de chaque champ de texte de la nouvelle
nextField
propriété dansviewDidLoad
:Bien que si nous le voulions, nous pourrions préfixe de la propriété avec
@IBOutlet
, et qui nous permettrait de brancher jusqu'à nos "nextField" droit de propriété dans interface builder.De modifier l'extension pour ressembler à ceci:
Et maintenant que le raccordement de la
nextField
propriété dans interface builder:(Configurer votre délégué pendant que vous êtes là aussi.)
Et bien sûr, si le
nextField
propriété renvoienil
, le clavier vient se cache.objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN
au lieu deUInt(OBJC_ASSOCIATION_RETAIN)
.OBJC_ASSOCIATION_RETAIN
devrait fonctionner aussiVoici un exemple rapide:
J'ai créé un écran de 6
UITextField
s. Je leur confie les balises de 1 à 6, dans Interface Builder. J'ai aussi changé le Retour de la clé à Côté de l'IB. Puis j'ai mis en place les éléments suivants:textField.superView?.viewWithTag(nextTag) as? UITextField
, et pourquoi êtes-vous de retourfalse
detextFieldShouldReturn
?textField.superview?.viewWithTag(nextTag)
à l'intérieur detextFieldShouldReturn
àself.tableView.viewWithTag(nextTag)
. J'ai ajouté 1 texte déposé dans une cellule personnalisé et la création de plusieurs lignes avec des champs de texte à l'aide de cette cellule personnalisé.Il n'y a rien de mal avec les autres réponses, c'est juste une approche différente avec l'avantage d'être plus concentré sur la programmation orientée objet - à mon humble avis (bien que ce soit un peu plus de travail à l'avant, il peut être réutilisé). Dans le storyboard, je commence à ajouter des balises avec une gamme distincte (e.g 800-810) qui définissent l'ordre des champs je veux déplacer entre. Ceci a l'avantage de travailler à travers tous les sous-vues dans la vue principale, de sorte que l'on peut naviguer entre les UITextField et UITextView (et tout autre contrôle) en fonction des besoins.
Général, j'essaie généralement d'avoir vue des contrôleurs de message entre les vues et le gestionnaire d'événements personnalisés objets. J'utilise donc un message (aka, NSNotification) passé à la vue-contrôleur à partir d'un personnalisé délégué de classe.
(TextField Gestionnaire De Délégués)
Cela permet à mon avis de contrôleur pour rester concentré sur le principal travail de gestion de la messagerie entre les objets, de modèle et de vue.
(Vue Contrôleur reçoit un message du délégué et transmet les instructions à l'aide de la advanceToNextField fonction)
Juste une autre façon d'obtenir le résultat que j'ai trouvé utile. Mon application a 11 champs de texte suivie d'un affichage de texte. J'avais besoin d'être en mesure de passer à travers tous les champs à l'aide de la clé suivante et puis de démissionner du clavier à la suite de la textview (c'est à dire d'autres notes).
Dans le storyboard, j'ai mis le tag sur tous les champs (à la fois du texte et textview) à compter de 1 à 12, 12 étant le textview.
Je suis sûr qu'il ya d'autres façons de le faire et cette méthode n'est pas parfait, mais nous espérons que cela aide quelqu'un.
Dans le code, j'ai écrit ce qui suit: