UITextfield sans majuscules ni caractères spéciaux
Bonjour,
Je souhaite que lorsqu'un utilisateur de mon appli tape un nom dans un UITextfield il n'ait pas la possibilité d'utiliser certains caractères: interdire les espaces, les lettres en majuscule et la plupart des caractères spéciaux. (Ce champ doit me permettre d'enregistrer un identifiant sur une base de donnée).
En faisant des recherches j'ai trouvé des méthodes qui suivent souvent la même logique :
définir les caractères autorisés. Voici un exemple :
#define ACCEPTABLE_CHARACTERS @abcdefghijklmnopqrstuvwxyz0123456789_.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
Malheureusement ça n'a pas d'effet sur mon textfield, je peux toujours taper des majuscules ou des caractères spéciaux.
Peut-être que ce que je voudrais faire n'est pas possible ? Qu'en pensez-vous ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Oops... merci Céroce tu m'as mis sur la voie ::)
c'est bon j'ai mis un delegate ça bloque les caractères tels que définis !
Ok merci beaucoup !
Un point de détail : j'ai ajouté une limite au nombre de caractères de cette manière (ici limité à 5) :
Arrivé à 5 caractères l'utilisateur ne peut plus utiliser la touche "effacer" du clavier
et se trouve donc bloqué s'il n'appuie pas sur le "clear button" pour effacer tout le contenu du textfield.
Pas très gênant si j'autorise un grand nombre de caractères mais je pense que je ne l'ai pas écrit correctement , qu'en pensez-vous ?
Peut-être plus simple :
... avec fonctionnalité supprimer.
Ou, si tu voulais accepter les caractères accentués :
Effectivement Johanna j'aimerais beaucoup avoir la même chose en obj C
OK, je suis une bonne pâte ::)
ça compile mais je ne l'ai pas testé
Génial un grand merci Johanna ça fonctionne très très bien !!
Et en Fortran ou en Cobol ? 8--)
Tu voulais inclure les caractères accentués ?
Rolalalala, il y a rien à dire, Joanna est vraiment la meilleure !
Effectivement j'ai ajouté quelques caractères accentués
Encore merci et bravo pour ton code (d'orfèvre)
Tu sais que [NSMutableCharacterSet lowercaseLetterCharacterSet] eux comprend déjà ?
Ok merci, j'apprends petit à petit
Et ça : https://vandadnp.wordpress.com/2012/03/24/nscharacterset-lowercaselettercharacterset-is-to-be-avoided/
On apprend chaque jour qqch de nouveau
Dans le même genre de question comment puis-je ajouter un petit bout de code pour éviter la double virgule du genre "23,89" est ok
"23,8,9" provoque un plantage système, peut-être même du Mac ?
Juste une autre question dans son VC pour les "delegate" on doit incorporer a l'ouverture de la vue "monTextField.delegate = self"
si on le fait avec le lien prévu dans IB c'est pareil ?
Tu as de la chance !
Je suis en train d'achever un "DecimalTextFieldInteractor", qui fait toute la validation. Je vais le publier sur mon blog, dès que j'aie rédigé l'article.
En réponse à ton problème :
Attention ! il faut utiliser Locale.autoupdatingCurrent.decimalSeparator à la place de "," ou "."
Oui, ils sont pareils.
Oh, et pour le validCharacters, je fais qqch comme :