Как я могу ограничить символы в UITextView? - PullRequest
6 голосов
/ 05 февраля 2012

Я искал решения и нашел следующий фрагмент кода.Но я не знаю, как им пользоваться, к сожалению.

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string {
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 25) ? NO : YES;
    }

Только для целей тестирования я установил IBACTION

-(IBAction)checkIfCorrectLength:(id)sender{
    [self textView:myTextView shouldChangeTextInRange: ?? replacementText: ?? ];

}

Что я могу получить за shouldChangeTextInRange и replacementText?Или я все неправильно понял?

Ответы [ 5 ]

11 голосов
/ 05 февраля 2012

Звонить textView:shouldChangeTextInRange:replacementText: из checkIfCorrectLength: не имеет смысла.Если вы хотите проверить длину из нескольких методов, разделите тест на собственный метод:

- (BOOL)isAcceptableTextLength:(NSUInteger)length {
    return length <= 25;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string {
    return [self isAcceptableTextLength:textField.text.length + string.length - range.length];
}

-(IBAction)checkIfCorrectLength:(id)sender{
    if (![self isAcceptableTextLength:self.textField.text.length]) {
        // do something to make text shorter
    }
}
2 голосов
/ 02 июля 2013

Привет, я нашел и изменил код здесь.Так что для пользователей xamarin.попробуйте следующее:

textView.ShouldChangeText += delegate
{
   if(textView.Text.Length > 159) // limit to one sms length
   {
      return false;
   }

   return true;
}
1 голос
/ 05 февраля 2012

Вы не вызываете этот метод самостоятельно, текстовое представление вызывает его всякий раз, когда собирается изменить свой текст.Просто установите свойство delegate для текстового представления (например, для вашего контроллера представления) и реализуйте метод там.

0 голосов
/ 28 февраля 2015
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text length] == 0)
{
    if([textView.text length] != 0)
    {
        return YES;
    }
    else {
        return NO;
    }
}
else if([[textView text] length] > your limit value ) 
{
    return NO;
}
return YES;

}
0 голосов
/ 25 февраля 2014

Если текущий объект является делегатом текстового представления, то вы можете использовать следующий фрагмент:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return weightTextView.text.length + text.length - range.length < 7;
}

Это сработало для меня.

...