2010-01-06 2 views
22

У меня есть UITextView, пользователь может писать максимум 160 символов в textView. Как я могу исправить максимальную длину текста UITextView?Как можно отредактировать длину текста UITextView?

+1

Это не дубликат .... Пользователь нужен метод определения длины 'UITextView' не в' UITextField ' –

ответ

15

заменить

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

с

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

который отвечает here

0

вы можете увидеть аналогичный вопрос here. он получил ответ

+0

это для UITextField .. – Zaraki

58

Этот фрагмент кода работает с Copy/Paste, но и справляется с ситуацией, когда пытаясь вставить количество символов, которые сделают просмотр текста выше предела. В этом случае вставляются только первые символы строки.

#define MAX_LENGTH 15 // Whatever your limit is 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    NSUInteger newLength = (textView.text.length - range.length) + text.length; 
    if(newLength <= MAX_LENGTH) 
    { 
     return YES; 
    } else { 
     NSUInteger emptySpace = MAX_LENGTH - (textView.text.length - range.length); 
     textView.text = [[[textView.text substringToIndex:range.location] 
              stringByAppendingString:[text substringToIndex:emptySpace]] 
             stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]]; 
     return NO; 
    } 
} 
+0

Отличное решение – kevinlawler

+0

Единственная проблема (если только это не моя реализация) - это как заставить счетчик работать с этим. –

+2

Что вы называете 'counter'? Отображение количества символов в текстовом представлении? Если да, вы можете обновить счетчик в textView: textDidChange: method (он работает в моем проекте). – manicaesar

12

Немного позднее этого ответа; Решение manicaesar не работало для меня. Вот моя реализация той же идеи:

#define MAX_LENGTH 140 
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)replacementText 
{ 
    NSString *newText = [ textView.text stringByReplacingCharactersInRange: range withString: replacementText ]; 
    if([newText length]<= MAX_LENGTH){ 
     return YES; 
    } 
    // case where text length > MAX_LENGTH 
    textView.text = [ newText substringToIndex: MAX_LENGTH ]; 
    return NO; 
} 
+0

Я предпочитаю этот метод, так как он также ограничивает символы при вставке текста, который превышает MAX_LENGTH. Имейте в виду, замените «replaceText» на «текст», чтобы избежать ошибок. –

+0

это прекрасно, не сбой – NSGodMode

0

Swift 3

fileprivate let maxLen = 5 

    extension MyViewController : UITextViewDelegate{ 
     func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 

      let newLen = (textView.text.characters.count - range.length) + text.characters.count 
      return newLen <= maxLen 
     } 

    }