Est-il possible de définir la longueur maximale sur un UITextField?
Quelque chose comme l'attribut MAXLENGTH dans les champs de saisie HTML.
Est-il possible de définir la longueur maximale sur un UITextField?
Quelque chose comme l'attribut MAXLENGTH dans les champs de saisie HTML.
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!
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.
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;
}
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é!
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;
}
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 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.