La commutation entre les champs de Texte en appuyant sur la touche de retour rapide
Je suis de la conception d'une application iOS et je veux que lorsque la touche entrée est enfoncée dans mon iPhone, il me dirige vers le prochain champ de texte suivant.
J'ai trouvé un couple de questions similaires, avec d'excellentes réponses, mais ils ont tous simplement arriver à être en Objective-C et je suis à la recherche de code Swift, maintenant, c'est ce que j'ai jusqu'à maintenant:
func textFieldShouldReturn(emaillabel: UITextField) -> Bool{
return true
}
Elle est placée dans le fichier qui est connecté et contrôleur de la UIView qui contient les champs de texte, mais je ne suis pas sûr si c'est le bon endroit.
Je suis en fait la nouvelle swift, afin d'expliquer chaque étape peu ou je vais me débrouiller pour le rate, en quelque sorte. Je suis aussi à l'aide de la dernière version de Xcode si cela fait une différence.
bien, alors j'ai essayé et eu cette erreur:
//could not find an overload for '!=' that accepts the supplied arguments
func textFieldShouldReturn(textField: UITextField) -> Bool {
let nextTag: NSInteger = textField.tag + 1;
//Try to find next responder
let nextResponder: UIResponder = textField.superview!.viewWithTag(nextTag)!
if (nextResponder != nil) {//could not find an overload for '!=' that accepts the supplied arguments
//Found next responder, so set it.
nextResponder.becomeFirstResponder()
} else {
//Not found, so remove keyboard.
textField.resignFirstResponder()
}
return false; //We do not want UITextField to insert line-breaks.
}
Merci d'avance les copains!!
Vous devez vous connecter pour publier un commentaire.
Swift 3.0 (case à modifier l'histoire pour les versions précédentes):
Assurez-vous que votre
UITextField
les délégués et les balises sont incrémentés correctement. Cela peut aussi être fait par le biais de l'Interface Builder.Voici un lien vers un Obj-C post que j'ai trouvé: Comment naviguer dans les objets textfield (Suivant /Fait des Boutons)
Swift 5
Vous pouvez facilement passer à un autre Champ de texte lorsque vous cliquez sur la touche retour du clavier.
UITextFieldDelegate
et ajouter letextFieldShouldReturn(_:)
délégué de la méthode dans ViewControllerdelegate
option. Note : Faites ceci pour tous les TextFieldCréer un
IBOutlet
pour tous TextFieldsJe suggère que vous devriez utiliser l'instruction switch dans
textFieldShouldReturn(_:)
.Cette approche a besoin de quelques changements dans les vues de table et les vues de la collection, mais c'est bon pour les formes simples, je suppose.
Connecter votre
textFields
à unIBOutletCollection
, à les trier par sa coordonnée y et danstextFieldShouldReturn(_:)
juste sauter le champ suivant jusqu'à ce que vous atteignez la fin:Ou tout simplement regarder exemple de projet (xcode 7 beta 4)
J'ai essayé de nombreux codes et finalement cela a fonctionné pour moi dans Swift 3.0 Dernière [Mars 2017]
La "ViewController" classe hérité de la "UITextFieldDelegate" pour la fabrication de ce code de travail.
Ajouter le champ de Texte avec la Bonne Balise nuber et ce numéro est utilisé pour prendre le contrôle de zone de texte pertinente basée sur incrémentielle numéro de l'étiquette est attribuée.
Dans le code ci-dessus, le "returnKeyType = UIReturnKeyType.à côté de la question" où faire le clavier la touche retour pour s'afficher comme "Suivant", vous avez aussi d'autres options comme "Join/Aller", etc, en fonction de votre application de modifier les valeurs.
Cette "textFieldShouldReturn" est une méthode de UITextFieldDelegate contrôlé et nous avons ici à côté de terrain de la sélection fondée sur le Tag de la valeur d'incrémentation
la façon la plus simple de modifier à côté du Champ de texte est-ce pas nécessaire pour les longues code
Caleb est version en Swift 4.0
P. S.
textField.superview?
ne fonctionne pas pour moiSuffit d'utiliser
becomeFirstResponder()
méthode de UIResponder classe dans votretextFieldShouldReturn
méthode. ChaqueUIView
objets sontUIResponder
's sous-classes.Vous pouvez trouver plus d'informations sur
becomeFirstResponder()
méthode à Apple Doc en ici.Swift 4.2
C'est un Plus Générique et plus Facile Solution, vous pouvez utiliser ce code avec n'importe quelle quantité d'objets textfield.
Juste hériter UITextFieldDelegate et mise à jour de la Textfield Tag selon l'ordre et la copie cette fonction
Une méthode alternative pour les puristes qui n'aiment pas utiliser les tags, et veut que l'objet UITextField délégué à la cellule pour maintenir les composants séparés ou uni-directionnel...
Créer un nouveau protocole de liaison de la Cellule et de la TableViewController.
Ajouter le protocole de votre cellule, où votre TextField Délégué est également la cellule (je le fais dans la table de montage séquentiel).
Faire de votre TableViewController conforme à la CellResponder protocole (c'est à dire
class MyTableViewController: UITableViewController, CellResponder
) et de mettre en œuvre la méthode que vous le souhaitez. I. e. si vous avez différents types de cellules, alors vous pourriez le faire, de même que vous pouvez passer dans le IndexPath, l'utilisation d'une étiquette, etc.. N'oubliez pas de mettrecell.responder = self
dans cellForRow..Pas de toute spéciale, voici mon train d'utiliser pour changer le textFiled. Donc le code dans le ViewController semble bon :). #Swift4
Si vous avez beaucoup de textfield composants de mon être, il peut être préférable d'utiliser une sortie de la collection, reliant des objets textfield et réglage de la Touche de Retour à partir de l'interface builder
J'ai une bonne solution pour votre question.
ÉTAPE:
1 - mettre votre touche de retour à partir de la table de montage séquentiel.
2 - Dans votre swift fichier.
3 - Ne pas oublier de régler le délégué de la Textfield.
Merci 🙂