488 votes

Définir la longueur de caractère maximale d'un UITextField

Comment puis-je définir le nombre maximal de caractères dans un UITextField sur le SDK de l'iPhone lorsque je charge un UIView ?

1046voto

sickp Points 7522

Alors que la classe UITextField n'a pas de longueur maximale de la propriété, il est relativement simple d'obtenir cette fonctionnalité en définissant le champ de texte de l' delegate et de mettre en œuvre le délégué suivant la méthode:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 25) ? NO : YES;
}

Avant les modifications de champ de texte, l'objet UITextField demande le délégué si le texte doit être modifié. Le champ de texte n'a pas changé à ce point, de sorte que nous de la saisir actuel de la longueur et de la longueur de la chaîne, nous sommes insertion, moins la longueur de la gamme. Si cette valeur est trop longue (plus de 25 personnages dans cet exemple), de retour NO pour interdire le changement.

Lors de la saisie d'un seul caractère à la fin d'un champ de texte, l' range.location sera le champ actuel de la longueur, et range.length sera 0, car nous ne sommes pas remplacer/supprimer quoi que ce soit. L'insertion dans le milieu d'un champ de texte signifie simplement un autre range.location, et collage de plusieurs personnages, moyen string a plus d'un caractère.

Suppression de caractères simples ou de coupe de multiples caractères est spécifié par un range avec un zéro de longueur, et une chaîne vide. Le remplacement est une plage de suppression avec une chaîne non vide.

55voto

Domness Points 2299

Merci août! ( Post )

C'est le code que j'ai fini avec qui fonctionne:

 #define MAX_LENGTH 20

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.text.length >= MAX_LENGTH && range.length == 0)
    {
    	return NO; // return NO to not change text
    }
    else
    {return YES;}
}
 

22voto

Jmini Points 1371

Pour compléter août de réponse, une possible mise en œuvre de la fonction proposée (voir UITextField du délégué).

Je n'ai pas tester domness code, mais mine de ne pas être bloqué si l'utilisateur atteint la limite, et il est compatible avec une nouvelle chaîne qui vient remplacer un plus petit ou égal à un.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    //limit the size :
    int limit = 20;
    return !([textField.text length]>limit && [string length] > range.length);
}

17voto

August Points 9726

Vous ne pouvez pas le faire directement - UITextField n'a pas d'attribut maxLength , mais vous pouvez définir le délégué UITextField's , puis utiliser:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
 

11voto

Martin Pilkington Points 2355

Le meilleur moyen serait de mettre en place une notification concernant la modification de texte. Dans votre `` de votre méthode de contrôleur de vue vous aurez envie :

Incorporez dans la même classe :

Ensuite relier la prise de à votre et il ne vous laissera pas ajouter des caractères plus après que vous dépassez la limite. N’oubliez pas d’ajouter ceci à votre méthode dealloc :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X