67 votes

Définir la longueur maximale UITextField

Est-il possible de définir la longueur maximale sur un UITextField?

Quelque chose comme l'attribut MAXLENGTH dans les champs de saisie HTML.

244voto

TomA Points 5600

Cela fonctionne correctement avec le retour arrière et le copier / coller:

 #define MAXLENGTH 10

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

    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAXLENGTH || returnKey;
}
 

UPDATE: mise à jour pour accepter la clé de retour même lorsque MAXLENGTH est utilisé. Merci Monsieur Rogers!

41voto

coneybeare Points 23802

Mise à JOUR

Je ne peux pas supprimer cette réponse parce que c'est accepté, mais ce n'était pas correct. Voici le bon code, copié à partir de la Tomme ci-dessous:

#define MAXLENGTH 10

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

    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAXLENGTH || returnKey;
}

D'ORIGINE

Je pense que tu veux dire UITextField. Si oui, alors il ya un moyen simple.

  1. Mettre en œuvre les UITextFieldDelegate protocole
  2. Mettre en œuvre l' textField:shouldChangeCharactersInRange:replacementString: méthode.

Cette méthode est appelée à chaque caractère, appuyez sur précédent ou remplacement de caractères. dans cette méthode, vous pouvez faire quelque chose comme ceci:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if ([textField.text length] > MAXLENGTH) {
        textField.text = [textField.text substringToIndex:MAXLENGTH-1];
        return NO;
    }
    return YES;
}

17voto

Varun Chatterji Points 2114

Une meilleure fonction qui gère correctement les espaces arrière et limite les caractères à la limite de longueur fournie est la suivante:

 #define MAXLENGTH 8

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        int length = [textField.text length] ;
                if (length >= MAXLENGTH && ![string isEqualToString:@""]) {
                    textField.text = [textField.text substringToIndex:MAXLENGTH];
                    return NO;
                }
        return YES;
    }
 

À votre santé!

12voto

Andy Bradbrook Points 166

Ce code limite le texte tout en vous permettant également de saisir des caractères ou de coller n'importe où dans le texte. Si le texte résultant est trop long, les caractères de la plage sont modifiés et le texte obtenu est tronqué à la limite.

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

4voto

Roberto Miranda Points 21

Je pense que ce code ferait l'affaire:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range 
                                                       replacementString:(NSString*)string
{
   if (range.location >= MAX_LENGTH)
      return NO;
    return YES;
}
 

Avec cette méthode de délégation, vous pouvez empêcher l'utilisateur d'ajouter plus de caractères que MAX_LENGTH à votre champ de texte. Vous devez également lui permettre de saisir des espaces de retour si nécessaire.

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