2010-01-06 33 views
22

Tôi có UITextView, người dùng có thể viết tối đa 160 ký tự trong textView. Tôi có thể sửa chiều dài văn bản tối đa của UITextView bằng cách nào?độ dài văn bản của UITextView có thể được sửa?

+1

này KHÔNG phải là một trùng lặp .... Người dùng cần có một phương pháp để xác định độ dài của một 'UITextView' không phải là một' UITextField ' –

Trả lời

15

Thay

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

với

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

được trả lời here

0

bạn có thể thấy câu hỏi tương tự here. nó đã có câu trả lời

+0

này là dành cho UITextField .. – Zaraki

58

đoạn mã này cũng làm việc với Copy/Paste, mà còn đối phó với tình hình khi cố gắng dán số ký tự sẽ làm cho chế độ xem văn bản vượt quá giới hạn. Trong trường hợp đó, chỉ các ký tự đầu tiên của chuỗi được dán.

#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

Một giải pháp cao cấp – kevinlawler

+0

Vấn đề duy nhất (trừ khi nó chỉ là thực hiện của tôi) là làm thế nào để có được một truy cập để làm việc với điều này. –

+2

Bạn có ý nghĩa gì với 'bộ đếm'? Hiển thị số ký tự trong chế độ xem văn bản? Nếu có, bạn có thể cập nhật bộ đếm trong phương thức textView: textDidChange: (nó hoạt động trong dự án của tôi). – manicaesar

12

Đến cuối câu trả lời này; giải pháp của manicaesar không hiệu quả với tôi. Dưới đây là thực hiện của tôi về ý tưởng tương tự:

#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

Tôi thích phương pháp này vì nó cũng giới hạn các ký tự khi dán văn bản vượt quá MAX_LENGTH. Hãy nhớ bạn, thay thế 'replaceText' bằng 'text' để tránh lỗi. –

+0

điều này là hoàn hảo, không bị hỏng – 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 
     } 

    } 
Các vấn đề liên quan