Ограничить количество символов в uitextview - PullRequest
72 голосов
/ 22 марта 2010

Я даю текстовое представление, чтобы чирикать какую-то строку.

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

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{


    if([text isEqualToString:@"\b"]){
        DLog(@"Ohoooo");
        return YES;
    }else if([[textView text] length] > 140){

        return NO;
    }

    return YES;
}

Код работает хорошо, за исключением первого условия, что Backspace не работает. Предположим, что я достиг предела в 140 символов, так что метод выдаст мне false, и пользователь не сможет вставить больше символов, но после этого, когда я пытаюсь удалить некоторые символы, текстовое представление ведет себя как отключенное.

Так что вопрос, как удалить символы из textview.text или повторно включить текстовое представление.

Ответы [ 15 ]

1 голос
/ 17 ноября 2015

Здесь мы идем для лучшей подгонки. Отобразить количество оставленных символов: осталось «n» символов.

var charCount = 0;
let maxLength = 150
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

    if text == "" // Checking backspace
    {
        if textView.text.characters.count == 0
        {
            charCount = 0
            characterCount.text = String(format: "%i Characters Left", maxLength - charCount)
            return false
        }
        charCount = (textView.text.characters.count - 1)
        characterCount.text = String(format: "%i Characters Left", maxLength - charCount)
      return true
    }
    else
    {
        charCount = (textView.text.characters.count + 1)
        characterCount.text = String(format: "%i Characters Left", maxLength - charCount)

        if charCount >= maxLength + 1
        {
            charCount = maxLength
            characterCount.text = String(format: "%i Characters Left", maxLength - charCount)
            return false;
        }
    }
    return true
}
1 голос
/ 24 августа 2015

@ Tim Gostony's Swift Версия:

// restrict the input for textview to 500
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
    return count(textView.text) + (count(text) - range.length) <= 500;
}
1 голос
/ 21 марта 2014

Проблема с некоторыми из ответов, приведенных выше, например, у меня есть текстовое поле, и я должен установить ограничение на ввод 15 символов, затем оно останавливается после ввода 15-го символа. но они не позволяют удалить. То есть кнопка удаления тоже не работает. Как я столкнулся с той же проблемой. Вышел с решением, приведенным ниже. Работает идеально для меня

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
 if(textField.tag==6)
 {
    if ([textField.text length]<=30)
    {
        return YES;   
    }
    else if([@"" isEqualToString:string])
    {
        textField.text=[textField.text substringToIndex:30 ];
    }

    return NO;
 }
 else
 {
    return YES;
 }
}

У меня есть текстовое поле, тег которого я установил "6" и я ограничил максимальный предел символа = 30; отлично работает в любом случае

0 голосов
/ 12 сентября 2014
Use the following code...
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if(text.length == 0)
    {
        return YES;
    }
    else if(self.txtViewComments.text.length > 255)
    {
        return NO;
    }
    else
    {
        return YES;
    }
}
0 голосов
/ 21 июня 2014

Напишите ниже код в textView:shouldChangeTextInRange:replacementText: метод:

if ([textView.text length]>=3 && ![text isEqualToString:@""]) {
    return NO;
}
return YES;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...