Отсутствует последний символ из 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: функция. Надеюсь, это поможет вам:)

Другие вопросы по тегам