2010-01-06 25 views
22

मेरे पास UITextView है, उपयोगकर्ता टेक्स्ट व्यू में अधिकतम 160 वर्ण लिख सकता है। मैं UITextView की अधिकतम टेक्स्ट लंबाई कैसे निर्धारित कर सकता हूं?UITextView की टेक्स्ट लम्बाई कैसे तय की जा सकती है?

+1

यह कोई डुप्लिकेट नहीं है .... उपयोगकर्ता एक 'UITextView' की लंबाई निर्धारित नहीं एक' UITextField के लिए एक विधि की जरूरत है ' –

उत्तर

15

बदलें मिला है

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

जो उत्तर दिया जाता है

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

साथ here

0

आप एक समान प्रश्न here देख सकते हैं। यह जवाब

+0

यह एक यूआईटीएक्स्टफिल्ड के लिए है .. – Zaraki

58

कोड का यह हिस्सा भी कॉपी/पेस्ट के साथ काम करता है, लेकिन यह भी स्थिति जब साथ copes वर्णों की संख्या पेस्ट करने का प्रयास कर रहा है जो पाठ दृश्य को सीमा से अधिक कर देगा। उस स्थिति में, स्ट्रिंग के केवल पहले अक्षर चिपकाए जाते हैं।

#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

'काउंटर' से आपका क्या मतलब है? टेक्स्ट व्यू में वर्णों की संख्या प्रदर्शित करना? यदि हां, तो आप टेक्स्ट व्यू में काउंटर अपडेट कर सकते हैं: textDidChange: विधि (यह मेरे प्रोजेक्ट में काम करता है)। – 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 से अधिक पाठ को चिपकाते समय वर्णों को भी सीमित करता है। आपको याद रखें, त्रुटियों से बचने के लिए 'टेक्स्ट' के साथ 'replacementText' को प्रतिस्थापित करें। –

+0

यह सही है, क्रैश नहीं होता है – NSGodMode

0

स्विफ्ट 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 
     } 

    } 
संबंधित मुद्दे