Отсутствует последний символ из textField при установке ограничения на число символов
Я создал приложение, которое будет называть 5-значный добавочный номер больницы, который пользователь вводит в textField, добавляя к нему номер коммутатора.
Поскольку все добавочные номера состоят из 5 цифр, я бы предпочел, чтобы приложение инициировало команду telprompt, когда она насчитывает 5 цифр, вместо того, чтобы пользователь нажимал кнопку вызова. У меня пока это есть, но по какой-то причине он пропускает 5-ю цифру, когда показывает телпром. (т. е. если пользователь вводит "12345", телпром показывает только "1234". Есть идеи, почему?
- (BOOL)textField:(UITextField *)numberTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [self.numberTextField.text length] + [string length] - range.length;
if (newLength == 5) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"telprompt:(01233633331)(P)(%@)", self.numberTextField.text]]];
}
return YES;
}
1 ответ
Проблема в том, что ты запутался с shouldChangeCharactersInRange
, Текст в TextField изменится только тогда, когда эта функция вернет YES
, Вы читаете self.numberTextField.text
перед возвращением YES
для последнего персонажа. Пример: скажем, вы хотите ввести 01234. до 1234 ваше условие не выполняется, так как длина не равна 5. Но как только вы введете число 4, прежде чем 4 будет фактически добавлено к тексту текстового поля, shouldChangeCharactersInRange
будет вызван для соответствия, если введенный символ должен быть разрешен для ввода. Это та точка, где вы сейчас читаете текст в текстовом поле, который по-прежнему не длиннее 1 символа. Решение: Добавьте уведомление как это
[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
И ты можешь написать
if (newLength == 5) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"telprompt:(01233633331)(P)(%@)", self.numberTextField.text]]];
}
внутри textFieldDidChange:
функция. Надеюсь, это поможет вам:)