2012-12-26 2 views
1

UITextRange에서 모든 rect를 가져오고 싶습니다. UITextView 라인이 랩되면 UITextRange는 1 개 이상의 CGRect로 표현됩니다. iOS 6.0에는 "selectionRectsForRange :"메서드가 있으므로 모든 CGRect를 가져올 수 있습니다. 하지만 이전 버전에는 "firstRectForRange :"메서드 만 있습니다. API 문서를 여러 번 확인했지만 아무 것도 찾을 수 없습니다. 이 대답의 정보를 바탕으로iOS 6.0 이전 버전의 iOS 버전에서 rect를 가져 오는 방법

UITextPosition *beginning = textView.beginningOfDocument; 
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location]; 
UITextPosition *end = [textView positionFromPosition:start offset:range.length]; 
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end]; 

//(in iOS 6.0)  
NSArray *array = [textView selectionRectsForRange:textRange]; 
for (int i=0; i<[array count]; i++) { 
    NSLog(@"rect array = %@", NSStringFromCGRect([[array objectAtIndex:i] rect])); 
} 
// (in earlier version) 
CGRect rect = [textView firstRectForRange:textRange]; 

답변

0

frameOfTextRange를 사용하고 다음과 같이하면 어떻습니까? 그러나 특정 iOS 버전과 호환되는지 확실하지 않습니다.

- (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView 
{ 
    UITextPosition *beginning = textView.beginningOfDocument; 
    UITextPosition *start = [textView positionFromPosition:beginning offset:range.location]; 
    UITextPosition *end = [textView positionFromPosition:start offset:range.length]; 
    UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end]]; 
    CGRect rect = [textView firstRectForRange:textRange]; 
    return [textView convertRect:rect fromView:textView.textInputView]; 
} 
관련 문제