2013-07-09 6 views
5

प्राप्त करें क्या वर्तमान पंक्ति को UITextView की स्ट्रिंग के रूप में प्राप्त करने के लिए कोई तरीका है (पागल हैक्स का स्वागत है)? यह इस मामले में शब्द रैपिंग, आदि उदाहरण के लिए, शामिल होंगे:UITextView वर्तमान लाइन

enter image description here

विधि वापसी होगी "।? ढेर अतिप्रवाह यह बहुत अच्छा नहीं है मैं" क्योंकि है कि वर्तमान कर्सर के आधार पर लाइन है ।

यह कर्सर की स्थिति के आधार पर "यह एक परीक्षण है जिसे मैंने बनाया है" या "ऐसा सोचें" वापस कर सकता है। मैंने UITextView विधियों और UITextInput प्रोटोकॉल दोनों के साथ काम करने का प्रयास किया है।

संपादित करें:

यहाँ कोड मैं का उपयोग करने का प्रयास किया है। स्ट्रिंग को खोजने का कारण मुझे इसकी लंबाई प्राप्त करना है, इसलिए यही कारण है कि आप यूआई आधारित कोड देखेंगे।

NSRange location = self.textView.selectedRange; 
NSString *searchString = [self.textView.text substringWithRange:NSMakeRange(0, location)]; 
CGSize currentStringDimensions = [searchString sizeWithFont:self.textView.font constrainedToSize:CGSizeMake(self.textView.frame.size.width, self.textView.frame.size.height) lineBreakMode:NSLineBreakByWordWrapping];  
float numberOfRows = (currentStringDimensions.width/(self.textView.frame.size.width)); 
float left = (float)(numberOfRows - (int)numberOfRows) * (self.textView.frame.size.width); 

हालांकि यह काम नहीं करता है। मुझे लगता है कि इसमें शब्दों को लपेटने या अलग-अलग आकार के पात्रों के साथ कुछ हो सकता है, लेकिन बाएं मान पहली पंक्ति के बाद असंगत या बंद है।

+0

कोड आप की कोशिश की है और दिखाएँ के लिए काम किया क्या यह वास्तव में लौट आए, कितने करीब आप मिल गया (मैं कहेंगे 'UITextInput' है सही दृष्टिकोण)। – Wain

+0

इसके साथ मुख्य प्रश्न अपडेट करेगा – roozbubu

+1

इसे देखें - http://stackoverflow.com/questions/4421267/how-to-get-text-from-nth-line-of-uilabel/14413484#14413484 – TheTiger

उत्तर

0

मैंने बाईं ओर ऑफसेट प्राप्त करने के लिए UITextInput की caretRect विधि का उपयोग कर समाप्त कर दिया। बेकार ढंग से काम किया।

+1

क्या आप कार्य कोड पोस्ट कर सकते हैं दूसरों के लिए देखने के लिए? – jonathanpeppers

+0

@Jonathanpeppers दुर्भाग्यवश, मैं नहीं कर सकता। यह एक भुगतान इंटर्नशिप के लिए था जो मैं पिछली गर्मियों में कर रहा था, इसलिए कोड पहुंच योग्य नहीं है। – roozbubu

+1

क्या आप अपना उदाहरण फिर से कार्यान्वित कर सकते हैं और इसे पोस्ट कर सकते हैं? ऐसा लगता है कि यह स्टैक ओवरफ्लो का बिंदु है, यह स्वीकार्य उत्तर नहीं होना चाहिए जब तक कि वास्तव में इसका जवाब न हो। – jonathanpeppers

2

निम्नलिखित कोड समाधान काम कर रहा है। इस कोड में "स्वयं" UITextView के उदाहरण को संदर्भित करता है।

- (NSString *) getLineString:(NSRange)range 
{ 
    NSLayoutManager *manager = self.layoutManager; 

    // Convert it to a glyph range 
    NSRange matchingGlyphRange = [manager glyphRangeForCharacterRange:range actualCharacterRange:NULL]; 

    // line fragment rect at location range 
    CGRect rect = [manager lineFragmentRectForGlyphAtIndex:matchingGlyphRange.location effectiveRange:nil]; 

    // obtain the line range for the line fragment rect 
    NSRange lineRange = [manager glyphRangeForBoundingRect:rect inTextContainer:self.textContainer]; 

    // extract the string out from lineRange 
    return [self.text substringWithRange:lineRange]; 
} 

// ... later 
NSLog(@"line %@", [self getLineString:self.selectedRange]); 
0

यह मैं हूँ (स्वयं = UITextView)

func getLineString() -> String { 
    return (self.text! as NSString).substringWithRange((self.text! as NSString).lineRangeForRange(self.selectedRange)) 
}