Могу ли я ограничить набор символов для UITextField?
-
16-09-2019 - |
Вопрос
У меня есть растровый шрифт, в котором нет каждого отдельного символа, такого как символы с ударением (é î ü и т.д.) Или такие символы, как "¥" или ©, которые я использую для отображения имен пользователей в таблице рекордов игры.
Можно ли ограничить клавиатуру UIKit определенными символами или разрешить только определенные символы в UITextField?Или мне придется задействовать свой собственный механизм ввода?Я думаю, что олдскульный, аркадный стиль, "вещь" по одной букве за раз был бы в порядке вещей.
Решение
Вы могли бы попробовать использовать следующий метод UITextFieldDelegate:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
Другие советы
Используя метод UITextFieldDelegate, упомянутый intregus, вы можете сделать это довольно легко:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Only characters in the NSCharacterSet you choose will insertable.
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefgABCDEFG"] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
попробуйте использовать UIKeyboardTypeNamePhonePad
для вашего UITextField
.На нем есть только буквы и цифры:
textField.keyboardType = UIKeyboardTypeNamePhonePad;
Используя Interface builder, вы можете связать и получить событие для "Редактирования изменено" в любой вашей функции.Теперь там вы можете поставить галочку на длину
- (IBAction)onValueChange:(id)sender
{
NSString *text = nil;
int MAX_LENGTH = 20;
switch ([sender tag] )
{
case 1:
{
text = myEditField.text;
if (MAX_LENGTH < [text length]) {
myEditField.text = [text substringToIndex:MAX_LENGTH];
}
}
break;
default:
break;
}
}