Как ограничить ввод текста и количество символов? - PullRequest
3 голосов
/ 03 апреля 2011

У меня есть текстовое поле, и я хочу ограничить текст, который можно ввести, до 160 символов. Кроме того, мне нужен счетчик для получения текущей длины текста.

Я решил, используя NSTimer :

[NSTimer scheduledTimerWithTimeInterval:0.5 target:self 
         selector:@selector(countText) 
         userInfo:nil 
         repeats:YES];

И я показываю длину следующим образом:

-(void)countText{
    countLabel.text = [NSString stringWithFormat:@"%i",
                                _textEditor.text.length];
}

Это не лучшее решение счетчика, потому что оно зависит от времени, а не от события keyUp. Есть ли способ отловить такое событие и вызвать метод?

Другое дело, можно ли заблокировать / ограничить ввод текста, например, предоставив параметр максимальной длины в текстовом поле?

Ответы [ 4 ]

10 голосов
/ 03 апреля 2011

Это (или должно быть) правильная версия метода делегата:

- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
// "Length of existing text" - "Length of replaced text" + "Length of replacement text"
    NSInteger newTextLength = [aTextView.text length] - range.length + [text length];

    if (newTextLength > 160) {
        // don't allow change
        return NO;
    }
    countLabel.text = [NSString stringWithFormat:@"%i", newTextLength];
    return YES;
}
3 голосов
/ 03 апреля 2011

реализовать некоторые из UITextFieldDelegate методов протокола

_textEditor.delegate = self;

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    int len = [textField.text length];
    if( len + string.length > max || ){ return NO;}
    else{countLabel.text = [NSString stringWithFormat:@"%i", len];

return YES;}}

1 голос
/ 11 марта 2013

Используйте следующий код для ограничения символов в UITextField, следующий код принимает 25 символов в UITextField.

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
      {
            NSUInteger newLength = [textField.text length] + [string length] - range.length;
            return (newLength > 25) ? NO : YES;
      }
1 голос
/ 03 апреля 2011

вы можете использовать метод делегата

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

if(textField.length < max){
    return NO;
}else return YES;

}

и установите максимальную длину и верните НЕТ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...