Ограничить пользователя на ввод не более 50 слов в UITextView iOS

Я пытаюсь запретить пользователю вводить не более 50 слов в UITextView. Я попробовал решение PengOne из этого question1. Это работает для меня, за исключением того, что пользователь может вводить неограниченное количество символов в последнем слове.

Поэтому я подумал об использовании регулярных выражений. Я использую регулярное выражение, данное VonC в этом вопрос2. Но это не позволяет мне вводить специальные символы, такие как @, в текстовом представлении.

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

Может кто-нибудь знает какое-нибудь альтернативное решение для этого?

Заранее спасибо.


person iOSAppDev    schedule 11.12.2013    source источник
comment
Вы сказали, что ответ на вопрос 1 работает для вас, за исключением того, что пользователь может вводить неограниченное количество символов в последнем слове. Хорошо, если вы устанавливаете ограничение только на количество слов, любое слово может быть любой длины. Вам нужно будет установить как ограничение на количество слов, так и ограничение на длину слова. Это то, что вы хотите ?   -  person Nikhil Mathew    schedule 11.12.2013


Ответы (3)


Этот код должен работать для вас.

  - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        return textView.text.length + (text.length - range.length) <= 50;
    }
person Maulik Kundaliya    schedule 11.12.2013
comment
слова, а не символы - person Mike Pollard; 11.12.2013

Сделайте то, что предложено в «вопросе 2», но добавьте @ в скобках, чтобы вы могли ввести и это. Может потребоваться избежать его, если что-то рассматривает его как специальный символ.

person Gauntlet    schedule 11.12.2013

Вы используете [NSCharacterSet whitespaceCharacterSet] для вычисления слова.

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
static const NSUInteger MAX_NUMBER_OF_LINES_ALLOWED = 3;

NSMutableString *t = [NSMutableString stringWithString: self.textView.text];
[t replaceCharactersInRange: range withString: text];

NSUInteger numberOfLines = 0;
for (NSUInteger i = 0; i < t.length; i++) {
    if ([[NSCharacterSet whitespaceCharacterSet] characterIsMember: [t characterAtIndex: i]]) {
        numberOfWord++;
    }
}

return (numberOfWord < 50);
}

Метод textViewDidChangeSelection: вызывается при выделении части текста или изменении выделения, например при копировании или вставке части текста.

person payal    schedule 11.12.2013
comment
Вы должны внимательно прочитать вопрос. Не вводите в заблуждение правильным ответом на другой вопрос. - person Mani; 11.12.2013