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
?
Réponses
Trop de publicités?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.
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;}
}
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);
}
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 :