Как получить рецензии от UITextRange в более ранней версии iOS, чем iOS 6.0

Я хочу получить все рецепты от UITextRange. Вы знаете, что если перенос строки UITextView, UITextRange будет представлен более чем 1 CGRect. в iOS 6.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];

2 ответа

Как насчет использования 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];
}

Основываясь на информации в этом ответе: Как найти положение или получить прямоугольник любого слова в текстовом представлении и разместить над ним кнопки?

Вы должны позвонить firstRectForRange несколько раз.

Когда вы получите первый прямоугольник обратно, вы сможете проверить его диапазон. Используя это и диапазон, который вы поставили изначально, вы можете позвонить firstRectForRange снова с настроенным диапазоном (при необходимости)...

Другие вопросы по тегам