shouldChangeCharactersInRange: метод не позволяет удалить существующий символ - PullRequest
1 голос
/ 26 декабря 2011

В настоящее время я запрещаю пользователю вводить текст длиной более 4 символов.

Для этого я использую этот кусок кода

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string{

    if ([textField.text length] == 4)
        return NO;
    else
        return YES;    
}

Работает нормально и не позволяет пользователю писать более 4 символов.

Но когда я пытаюсь удалить существующий символ. Параметр удаления с клавиатуры не работает.

Как решить эту проблему

Ответы [ 2 ]

7 голосов
/ 26 декабря 2011

Когда метод shouldChangeCharactersInRange вызывается, текстовое поле все еще имеет старое значение, поэтому, если его длина равна 4, вы застряли.Лучшим способом проверки ввода будет вычисление строки, которую вы будете иметь в поле после изменения, и проверка, является ли она действительной:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString: (NSString *)string{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range
                                                         withString:string];
    return [newString length] <= 4;
}
0 голосов
/ 26 декабря 2011

напишите как ниже это будет работать

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength>4) ? NO : YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...