如何在ios6.0之前的iOS版本中从UITextRange获得rects



我想从UITextRange获得所有的rects。如果UITextView换行,UITextRange会用多于1个CGRect来表示。在ios6.0中,有一个名为"selectionRectsForRange:"的方法,所以你可以获得所有的CGRects。但在旧版本中,只有一个方法"firstRectForRange:"我一遍又一遍地检查api文档,但我什么也没找到。

我的代码喜欢吹:

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];

根据答案中的信息:如何找到位置或在textview和放置按钮的任何单词的rect ?

您必须多次呼叫firstRectForRange

当你得到第一个 rect返回时,你将能够检查它的范围。使用这个和您最初提供的范围,您可以再次调用firstRectForRange,并调整范围(如果需要)…

如何使用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];
}

相关内容

  • 没有找到相关文章

最新更新