2010-05-04 5 views
54

Construction d'un ensemble NSCharacter pour restreindre un UITextField à la saisie de noms d'utilisateur. Je veux que l'utilisateur puisse également entrer un trait de soulignement (donc [A-Za-z0-9_]) mais alphanumericCharacterSet ne l'inclut pas. Existe-t-il un moyen de spécifier une plage comme celle-ci sous forme abrégée? Je vois + (id)characterSetWithRange:(NSRange)aRange, mais je ne comprends pas vraiment comment cela fonctionnerait. J'ai une simple sous-classe UITextField à laquelle je passe le jeu de caractères. La restriction fonctionne correctement et ne permet pas à l'utilisateur de saisir autre chose que des caractères alphanumériques. Juste besoin d'ajouter le "_" à ces allocations.NSCharacterSet: Comment ajouter "_" à la restriction de texte alphanumericCharacterSet?

NSCharacterSet *characterSet = [NSCharacterSet alphanumericCharacterSet]; 
[textField setAllowed:characterSet]; 
[textField setFrame:frame]; 

Répondre

115

Objective-C

NSMutableCharacterSet *_alnum = [NSMutableCharacterSet characterSetWithCharactersInString:@"_"]; 
[_alnum formUnionWithCharacterSet:[NSCharacterSet alphanumericCharacterSet]]; 

Swift

let _alnum = NSMutableCharacterSet(charactersIn: "_") 
_alnum.formUnion(with: .alphanumerics) 
+4

+1 ce que j'aime le plus est que sur Cocoa est que je découvre quelque chose de nouveau chaque jour. C'est nouveau pour moi, mais c'est exactement la bonne façon de le faire. super trouvaille! –

+2

En effet. Élégant et efficace. Merci, dessiné. – typeoneerror

28

Une autre façon aurait été de le rendre mutable et l'ajouter.

NSMutableCharacterSet *characterSet = [NSMutableCharacterSet alphanumericCharacterSet]; 
[characterSet addCharactersInString:@"_"]; 
0
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSCharacterSet *blockedCharacters = [[NSCharacterSet whitespaceCharacterSet] invertedSet]; 
    NSCharacterSet *blockedCharacters2 = [[NSCharacterSet letterCharacterSet] invertedSet]; 
    return ([string rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound || [string rangeOfCharacterFromSet:blockedCharacters2].location); 

} 
Questions connexes