2012-03-19 7 views
15

텍스트 필드의 UITextRange 객체를 통해 UITextField의 현재 캐럿 위치에 접근 할 수있는 방법이 있습니까? UITextField는 UITextRange를 사용하더라도 반환합니까? UITextPosition의 공용 인터페이스에는 보이는 멤버가 없습니다.UITextField의 UITextPosition

답변

20

나는 지난 밤에 같은 문제에 직면했다. UITextField에서 offsetFromPosition을 사용하여 선택한 범위의 "시작점"을 상대 위치로 가져와야합니다.

이 텍스트 필드를 변경 한 후 사용자의 위치를 ​​복원 쉬웠다로

// 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

고마워요. 당신의 코드는'UITextPosition'과'UITextView'를 어떻게 사용할 수 있는지 알아 내는데 도움이되었습니다. – derpoliuk

관련 문제