如何在iOS 6.0之前的iOS版本中获取UITextRange的版本

时间:2012-12-26 08:39:09

标签: ios range cgrect uitextrange

我想从UITextRange获取所有信息。要知道,如果UITextView换行,UITextRange将由超过1个CGRect表示。在iOS 6.0中,有一个方法为“selectionRectsForRange:”,因此您可以获得所有CGRect。但在旧版本中,只有一个方法“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];

2 个答案:

答案 0 :(得分:0)

根据此答案中的信息: How to find position or get rect of any word in textview and place buttons over that?

您必须反复拨打firstRectForRange

当您将第一个矩形带回来时,您将能够检查其范围。使用此以及您最初提供的范围,您可以使用调整范围(如果需要)再次致电firstRectForRange ...

答案 1 :(得分: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];
}