Comment entrer des Nombres uniquement dans UITextField et de limiter au maximum la longueur?
Dans UITextField nous Saisir des chiffres uniquement et limitée à 3 numérique de pour cela j'ai utilisé le code ci-dessous
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS_ONLY] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
while (newLength < CHARACTER_LIMIT) {
return [string isEqualToString:filtered];
}
/* Limits the no of characters to be enter in text field */
return (newLength > CHARACTER_LIMIT ) ? NO : YES;
}
Quand j'appuyez sur appuyez longuement sur textfield (comme l'image ci-dessous )et entrez la chaîne entre deux nombres, c'est en permettant à tous les caractères spéciaux et les affréteurs.
OriginalL'auteur sreenivas | 2012-02-28
Vous devez vous connecter pour publier un commentaire.
Pas que je n'aime pas la réponse que j'ai écrit à cette question, qui a été copie & collé ici aussi. Je vais essayer d'expliquer votre erreur.
Cette réponse est fondée sur l'hypothèse que votre constantes sont définies à quelque chose comme ceci:
La raison que votre logique est un échec, c'est que vous ne manipulez jamais le cas lorsque
newLength
sera égale à laCHARACTER_LIMIT
.Pour illustrer supposons que le champ est vide, et vous demande de coller la chaîne
@"ABC"
à la textfield, votre délégué méthode est appelée. Vous créez la chaînefiltered
qui évalue correctement à une chaîne vide, et vous ne pouvez pas attendre pour exécuter la lignereturn [string isEqualToString:filtered];
mais vous n'avez jamais réellement évaluer cette ligne parce que vous ne remplissez pas les conditions d'entrée dans la boucle while, carnewLength
est 3. ainsi, les simplesreturn (newLength > CHARACTER_LIMIT ) ? NO : YES;
décide de la valeur de retour.Si votre
CHARACTER_LIMIT
est en fait 4 pour une raison quelconque, imaginez@"ABCD"
que la chaîne de la logique s'applique toujours.Voici un exemple simple de votre correction de la fonction de travail. Encore une fois je suis en supposant que
CHARACTER_LIMIT
est égal à 3.pourriez-vous utiliser [NSCharacterSet decimalDigitCharacterSet] à la place?
OriginalL'auteur NJones
Sa fonctionne très bien pour moi u pouvez utiliser ce code
OriginalL'auteur Rama Rao
OriginalL'auteur neoneye
Vérifier la
UITextFieldDelegate
méthodeCette méthode sera invoquée à chaque fois après que vous tapez/appuyez sur un caractère ou appuyez sur la touche copier/coller et avant que l'action modifie les caractères affichés. Ici, vous pouvez très bien à votre chèque de maxLength et numéros-seulement la saisie de texte(en utilisant RegularExpression bagout que donnée ci-dessous) et le retour OUI ou NON basd. Si vous retournez OUI, il va faire le changement sinon il ne sera pas. Espérons que cela efface le doute.
OriginalL'auteur durai
Je préfère utiliser un NSNumberFormatter pour valider le texte peut être analysé en un nombre. NSNumberFormatter retourne nil si la chaîne ne peut pas être convertie en nombre. Cela vous permet de réagir à l'entrée (c'est à dire de rendre le texte rouge, de lancer une alerte)
OriginalL'auteur Todd Lahtinen