से चयनित टेक्स्ट फ्रेम कैसे प्राप्त कर सकता हूं, मैं में किसी चयनित टेक्स्ट के रेक्ट से UIPopoverController
प्रदर्शित करने का प्रयास कर रहा हूं, मैं चयनित टेक्स्ट CGRect
कैसे प्राप्त कर सकता हूं?मैं UITextView
धन्यवाद!
से चयनित टेक्स्ट फ्रेम कैसे प्राप्त कर सकता हूं, मैं में किसी चयनित टेक्स्ट के रेक्ट से UIPopoverController
प्रदर्शित करने का प्रयास कर रहा हूं, मैं चयनित टेक्स्ट CGRect
कैसे प्राप्त कर सकता हूं?मैं UITextView
धन्यवाद!
मुझे लगता है कि [UITextInput selectedTextRange]
और [UITextInput caretRectForPosition:]
वह है जिसे आप ढूंढ रहे हैं।
[UITextInput selectedTextRange]
चरित्र में चयनित श्रेणी रिटर्न
[UITextInput caretRectForPosition:]
रिटर्न इस इनपुट में चरित्र रेंज के CGRect
।
UITextView
UITextInput
(आईओएस 5 के बाद से) के अनुरूप है, इसलिए आप इन विधियों का उपयोग अपने UITextView
उदाहरण के लिए कर सकते हैं।
यह ऐसा कुछ होने जा रहा है।
UITextRange * selectionRange = [textView selectedTextRange];
CGRect selectionStartRect = [textView caretRectForPosition:selectionRange.start];
CGRect selectionEndRect = [textView caretRectForPosition:selectionRange.end];
CGPoint selectionCenterPoint = (CGPoint){(selectionStartRect.origin.x + selectionEndRect.origin.x)/2,(selectionStartRect.origin.y + selectionStartRect.size.height/2)};
संपादित करें: चूंकि नमूना कोड प्राप्त करने में थोड़ा मुश्किल हो गया है, इसलिए मैंने पूरक के लिए एक छवि जोड़ा।
छोटी समस्या, आप इसे केंद्र बिंदु कहते हैं लेकिन आप वास्तव में नीचे दाएं बिंदु की गणना कर रहे हैं। – Till
@ तब तक, मैंने मूल रूप से सोचा [UITextInput caretRectForPosition:] UITextRange इनपुट के रूप में ले जाएगा, लेकिन (जैसा कि नाम बताता है) यह वास्तव में UITextPosition लेता है। मैंने नमूना कोड तय किया, और मुझे लगता है कि यह अब और अधिक सटीक है हालांकि थोड़ा मुश्किल है। और संस्करण के लिए धन्यवाद! – barley
आपके केंद्र की गणना में अभी भी एक छोटी सी समस्या है: डी ... एक्स-समन्वय को दोबारा जांचें, ब्रैकेट गलत तरीके से केंद्र को कैल्क करने के लिए सेट हैं। – Till
कुछ स्थितियों में, जहां जौ का जवाब वास्तव में चयन के केंद्र नहीं देंगे कर रहे हैं। उदाहरण के लिए:
इस मामले में आप कॉपी/पेस्ट मेनू चयन, जो पाठ क्षेत्र के पूरे चौड़ाई तक फैली के केंद्र में प्रदर्शित कर रहा है देख सकते हैं। लेकिन दो कैरेट रीक्ट्स के केंद्र की गणना करने से दाईं ओर एक स्थिति अधिक होगी।
आप एक और अधिक सटीक selectionRectsForRange:
UITextRange *selectionRange = [textView selectedTextRange];
NSArray *selectionRects = [self.textView selectionRectsForRange:selectionRange];
CGRect completeRect = CGRectNull;
for (UITextSelectionRect *selectionRect in selectionRects) {
if (CGRectIsNull(completeRect)) {
completeRect = selectionRect.rect;
} else completeRect = CGRectUnion(completeRect,selectionRect.rect);
}
यह भी स्पष्ट लायक है कि अगर आप अभी भी आईओएस 4 समर्थन कर रहे हैं और इन उत्तरों में से किसी का उपयोग कर, आप सुनिश्चित करें कि इन तरीके हैं बनाने के लिए की आवश्यकता होगी का उपयोग कर परिणाम प्राप्त कर सकते हैं उन्हें कॉल करने से पहले समर्थित: if ([textView respondsToSelector:@selector(selectedTextRange)]) { …
परफेक्ट, एक आकर्षण की तरह काम किया – aryaxt
आपको वास्तव में CGRectIsNull की जांच की आवश्यकता नहीं है क्योंकि CGRectUnion पहले से ही इसे संभालता है। CGRectUnion के लिए प्रलेखन के अनुसार: "अगर आयताकारों में से कोई एक शून्य आयताकार है, तो अन्य आयताकार की एक प्रति वापस आती है" –
यदि यह प्रश्न मुझे लगता है कि यह क्या है, तो शीर्षक में यूआईपीओपीओवर नियंत्रक शायद भ्रामक है? आप टेक्स्ट चयन से CGPoint प्राप्त करना चाहते हैं, यह UIPopoverController के लिए कुछ खास नहीं है, है ना? – barley
शीर्षक को फिक्स्ड करें क्योंकि आपका सुझाव वैध @barley है। – Till