iPhone Vigueur de zone de texte de Saisie en majuscules
Comment puis-je la force de caractères d'entrée dans une zone de texte sur l'iPhone pour les majuscules?
Vous devez vous connecter pour publier un commentaire.
Comment puis-je la force de caractères d'entrée dans une zone de texte sur l'iPhone pour les majuscules?
Vous devez vous connecter pour publier un commentaire.
Ensemble
autocapitalizationType
àUITextAutocapitalizationTypeAllCharacters
sur leUITextField
.Voir UITextInputTraits protocole (adoptée par UITextField) pour plus de détails.
textField:shouldChangeCharactersInRange:replacementString:
deUITextFieldDelegate
et quand une lettre minuscule est entré, le modifier à sa majuscule homologue.string
n'est passé comme argument. Vous aurez à faire quelque chose commetextField.text = [textField.text stringByReplacingCharactersInRange:range withString:[string uppercaseString]]; return NO;
Cette solution n'est pas pleinement satisfaisante.
Même avec le
autocapitalizationType
ensemble deUITextAutocapitalizationTypeAllCharacters
, l'utilisateur peut encore appuyez sur la touche majuscule pour libérer le verrouillage des majuscules. Et letextField.text = [textField.text stringByReplacingCharactersInRange:range withString:[string uppercaseString]]; return NO;
solution n'est pas très bonne: nous perdons le point d'insertion si l'utilisateur modifie le milieu du texte (après untextField.text =
, l'édition curseur passe à la fin de la chaîne).J'ai fait un mix des deux solutions et voici ce que je propose: ensemble
UITextAutocapitalizationTypeAllCharacters
, et ajoutez le code suivant à la déléguée de laUITextField
.text
propriété toujours positionne le curseur à la fin du texte. J'ai fait quelques expériences et ont effectivement trouvé le moyen de le faire sans perdre la position du curseur. Voir ma réponse ci-dessous.Alors que toutes les autres réponses ne fonctionnent réellement (ils font de la saisie en majuscules), ils ont tous le problème de la position du curseur n'est pas conservé (essayez d'insérer un caractère dans le milieu du texte existant). Ce qui, apparemment, se passe dans le setter de
UITextField
'stext
bien, et je n'ai pas trouvé une façon de le restaurer par programme (par exemple, la restauration de l'originalselectedTextRange
ne fonctionne pas).Cependant, la bonne nouvelle, c'est qu'il y a un moyen direct pour remplacer les pièces d'un
UITextField
(ou deUITextView
's) du texte, qui ne souffre pas de ce problème:Pour de plus amples informations sur ces méthodes, voir la documentation de
UITextInput
.Plutôt que de test pour savoir si le personnage est haut ou bas-de-casse, il suffit de supposer que c'est moins le cas. Beaucoup plus simple.
Dans le
méthode:
La façon la plus simple serait d' , de mettre en œuvre la modification changement de la méthode du champ de texte et définissez le champ texte de la valeur supérieure de la représentation du texte saisi
C'est mon code, quand j'ai 6 textFields
J'espère que vous aurez le point de
retour NE sera ont des problèmes avec le bouton de retour;
beter utiliser cette
Peut-être que je n'ai pas trouvé tous les replis de cette méthode, mais pour l'instant il fonctionne bien pour moi. Il semble que pour éviter les problèmes avec le saut de la sélection à la fin, si vous allez en bas de la route de retour PAS de -textField:shouldChangeCharactersInRange:replacementString:. Depuis UITextField est conforme à UIKeyInput, il suffit de surcharger la méthode -insertText: pour changer la chaîne d'entrée en majuscules avant d'appeler super avec la chaîne en majuscules:
Ou si vous avez déplacé le long de Swift:
J'ai été inspiré par les précédentes réponses (merci), mais chacun d'eux avait quelques défauts pour moi:
C'est donc mon code Swift qui vous donne le plein contrôle sur les caractères tapés (majuscules, minuscules, de l'ignorer...) ET permet le curseur là où vous l'attendez. Le code est testé pour fonctionner avec plus d'un textField.
Edit: testé avec iOS 8.3
Automatiquement entrée en majuscules dans le textfield:
Cas 1: Ajouter UITextDelegate protocole et de mettre en œuvre la méthode suivante
Cas 2:Définissez le paramètre suivant dans le ViewDidLoad() la méthode de votre point de vue contrôleur. Bien que, dans ce cas, l'utilisateur peut la bretelle de sortie de la caps bouton sur le clavier.
Un problème que j'ai avec certaines des réponses ci-dessus est que si vous essayez
textfield.text
, vous perdrez la position du curseur. Donc, si un utilisateur tente de modifier le milieu du texte, le curseur saute à la fin.Voici mon simple solution Swift, toujours à l'aide de
UITextFieldDelegate
:Vous avez encore à gérer si un utilisateur appuie sur le Retour, Fait, etc sur la touche sur le clavier. Juste ajouter:
...à l'intérieur de
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
.