Лучший способ получить линейные диапазоны в UITextView

Прямо сейчас я могу получить текстовые диапазоны каждой строки в UITextView, содержащей n строк, используя циклический переход через токенизатор с гранулярностью абзаца. К сожалению, это означает, что мой алгоритм поиска m-й строки в тексте имеет порядок n. Есть ли какой-нибудь более простой способ найти диапазон, кроме как сделать так, чтобы мой алгоритм записывал n? Вот как я могу найти свой текстовый диапазон на данный момент:


- (UITextRange *)textRangeOfLineAtIndex:(NSUInteger)index {

    UITextPosition *position = self.beginningOfDocument;

    NSUInteger lineCount = 0;
    while([self comparePosition:self.endOfDocument toPosition:position] == NSOrderedDescending && lineCount < index) {
        position = [self.tokenizer positionFromPosition:position toBoundary:UITextGranularityParagraph inDirection:UITextStorageDirectionForward];
        ++lineCount;
    }

    return [self rangeEnclosingPosition:position withGranularity:UITextGranularityParagraph inDirection:UITextStorageDirectionForward];

}

0 ответов

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