2012-03-19 15 views
15

क्या टेक्स्ट फ़ील्ड की UITextRange ऑब्जेक्ट के माध्यम से UITextField की वर्तमान कैरेट स्थिति में जाने का कोई तरीका है? UITextRange UITextField द्वारा किसी भी उपयोग के लिए भी लौटाया गया है? UITextPosition के लिए सार्वजनिक इंटरफ़ेस में कोई दृश्यमान सदस्य नहीं हैं।UITextField में UITextPosition

उत्तर

20

मुझे कल रात एक ही समस्या का सामना करना पड़ रहा था। यह पता चला है कि आपको स्थिति को काम करने के लिए चयनित श्रेणी के "प्रारंभ" की सापेक्ष स्थिति प्राप्त करने के लिए UITextField पर ऑफसेट फ्रॉमपोजिशन का उपयोग करना होगा।

उदा।

// Get the selected text range 
UITextRange *selectedRange = [self selectedTextRange]; 

//Calculate the existing position, relative to the beginning of the field 
int pos = [self offsetFromPosition:self.beginningOfDocument 
         toPosition:selectedRange.start]; 

मैं endOfDocument का उपयोग कर समाप्त हो गया के रूप में यह आसान था पाठ क्षेत्र बदलने के बाद उपयोगकर्ता की स्थिति को बहाल करने के लिए। मुझे लगता है कि यहाँ पर एक ब्लॉग पोस्टिंग लिखा है:

http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a-uitextfield/

+1

आपका लिंक एक संदिग्ध मैलवेयर साइट पर इंगित करता है। कृपया इसे देखें –

12

मैं uitextfield पर एक वर्ग का इस्तेमाल किया और लागू किया setSelectedRange और selectedRange (बस UITextView वर्ग में लागू तरीकों की तरह)। उदाहरण के लिए नीचे दिए गए कोड के साथ B2Cloud here पर एक उदाहरण मिलता है:

@interface UITextField (Selection) 
- (NSRange) selectedRange; 
- (void) setSelectedRange:(NSRange) range; 
@end 

@implementation UITextField (Selection) 
- (NSRange) selectedRange 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextRange* selectedRange = self.selectedTextRange; 
    UITextPosition* selectionStart = selectedRange.start; 
    UITextPosition* selectionEnd = selectedRange.end; 

    const NSInteger location = [self offsetFromPosition:beginning toPosition:selectionStart]; 
    const NSInteger length = [self offsetFromPosition:selectionStart toPosition:selectionEnd]; 

    return NSMakeRange(location, length); 
} 

- (void) setSelectedRange:(NSRange) range 
{ 
    UITextPosition* beginning = self.beginningOfDocument; 

    UITextPosition* startPosition = [self positionFromPosition:beginning offset:range.location]; 
    UITextPosition* endPosition = [self positionFromPosition:beginning offset:range.location + range.length]; 
    UITextRange* selectionRange = [self textRangeFromPosition:startPosition toPosition:endPosition]; 

    [self setSelectedTextRange:selectionRange]; 
    } 

@end 
+0

धन्यवाद। आपके कोड ने मुझे यह पता लगाने में मदद की कि मैं 'UITextView' के साथ' UITextPosition' का उपयोग कैसे कर सकता हूं। – derpoliuk