Проверить длину текстового поля - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь проверить длину текста в textField. Вот что я пытаюсь

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *textLenght = [NSString stringWithFormat:@"%@", [textField text]];
    if ([textLenght length] > 5)
    {
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Message" 
                                                message:@"Too long" 
                                                delegate:self 
                                                cancelButtonTitle:@"OK" 
                                               otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
        return NO;
    }
    return YES;
}

Этот код работает хорошо. Окно предупреждения отображается, когда я набираю более 5 символов. Проблема в том, что когда я пытаюсь удалить последний символ текстового поля, снова появляется окно с предупреждением.

Как это исправить?

Ответы [ 3 ]

6 голосов
/ 08 марта 2012

Сначала необходимо создать фактическую строку

NSString *str = [textField.text stringByReplacingCharactersInRange:range withString:text];

Затем вы проверяете длину

int length = str.length;

И продолжаете проверку if (length).

Таким образом, сначала создается необходимая строка (также с учетом пробелов).

2 голосов
/ 08 марта 2012

Чтобы проверить, была ли нажата кнопка удаления, вам нужно проверить, что "string" isEqual to @ "":

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

 if ([string isEqualToString:@""])...

}
0 голосов
/ 08 марта 2012

Вам нужно предотвратить добавление 5-го символа с самого начала, и тогда вы будете в порядке с удалением ...

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    NSLog(@"Enter");
    NSInteger oldLength = [textField.text length];
    NSInteger newLength = oldLength + [string length] - range.length;
    if(newLength >= 5){
       return NO;
    }
    return YES;
}
...