xcode 4.2.1 - ограничение длины символа в TextField - PullRequest
0 голосов
/ 27 февраля 2012

Я пытался ограничить textField многими кодами, доступными в Интернете, но безуспешно.

Я добавил UIViewController<UITextFieldDelegate> в заголовочный файл

и textField.delegate = self; в моем viewDidLoad

и в моем файле .m реализовано следующее:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    return !([newString length] > 5);
}

этот стиль не ограничивает мое текстовое поле.есть идеи?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Сделайте это следующим образом, поскольку это был точный дубликат этого

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 5) ? NO : YES;
}
0 голосов
/ 27 февраля 2012

Я реализую это в своем коде, и оно работает:

Этот код исключает все буквы, принимает только цифры, но, как я удаляю символ, вы можете удалить все, что превышает 5, и он сохраняет приятный эффект, который появляется и исчезает

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextFieldTextDidChangeNotification object:textField];
}


- (void)textChanged:(NSNotification *)textField {
    NSString *text = [[textField object] text];
    NSString *last = [text substringFromIndex:[text length] -1];
    NSArray *accept = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7" , @"8", @"9", @".", nil];

    for (int i=0; i<[accept count]; i++) {
        NSLog(@"%@", [accept objectAtIndex:i]);
        if (![last isEqualToString:[accept objectAtIndex:i]]) {
            [[textField object] setText:[text substringToIndex:[text length]-1]];
        }
    }
}
0 голосов
/ 27 февраля 2012

Строка замены - это только 1 нажатый символ, а не вся строка, поэтому вам необходимо добавить ее в текущий textfield.text перед подсчетом.Ваш счет, вероятно, всегда 1 (или больше, если вставить слово)

...