2010-05-04 4 views
54

Создание набора NSCharacter для ограничения UITextField для ввода имен пользователей. Я хочу, чтобы пользователь мог также ввести символ подчеркивания (поэтому [A-Za-z0-9_]), но alphanumericCharacterSet не включает его. Есть ли способ указать такой диапазон в краткой форме? Я вижу + (id)characterSetWithRange:(NSRange)aRange, но я не понимаю, как это будет работать.NSCharacterSet: Как добавить «_» в буквенно-буквенный символ?

У меня есть простой подкласс класса UITextField, которому я передаю набор символов. Ограничение работает отлично и не позволяет пользователю вводить что-либо, кроме буквенно-цифрового. Просто нужно добавить «_» к этим пособиям.

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

ответ

115

Objective-C

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

Swift

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

+1, что я люблю больше всего, что о какао является то, что я открываю что-то новое каждый день. Это для меня ново, но это правильный способ сделать это. отличная находка! –

+2

Действительно. Элегантный и эффективный. Спасибо, обратный. – typeoneerror

28

Другой путь был бы сделать его изменяемым и добавить его.

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); 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^