Принудительный ввод определенных типов символов в UITextField - PullRequest
0 голосов
/ 09 июня 2010

Если у меня есть UITextField, в который пользователь вводит регистрационный номер в формате: 11-11-1111

(то есть 2 цифры, тире, 2 цифры, тире, четыре цифры)

Как заставить пользователя вводить только данные такого типа (поскольку они фактически вводят их) ... чтобы они не могли вводить ничего, кроме 0-9 в первом символе, и только '- 'для третьего символа и т. д.

Ответы [ 3 ]

2 голосов
/ 09 июня 2010

С точки зрения UX, поскольку символы '-' являются фиксированными, ограничьте ввод только 0-9, установив для свойства keyboardType для UITextField значение UIKeyboardTypeNumberPad.

Реализация метода textField:shouldChangeCharactersInRange:replacementString: протокола UITextFieldDelegate, проверка длины textField.text и автоматическое добавление символа '-', если длина равна 2 или 5. Когда длина достигает 10 символов, не принимайтелюбые новые символы, просто удаляет.

0 голосов
/ 07 октября 2011

ок, понял из другого поста

использование

   if (range.length != 1){
            NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; 
            returnValue = ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
        }
0 голосов
/ 09 июня 2010

Вы можете проверить ввод с помощью регулярного выражения и показать сообщение об ошибке, если оно в неправильном формате. Смотрите здесь . Или вы можете разбить строку на тире и посмотреть на части (например, преобразовать их в целое число) (см. здесь ).

Еще один (непроверенный и теоретический) подход: установить делегат текстового поля на свой контроллер:

myTextField.delegate = self

и попробуйте:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...