NSTextStorage - Как найти символы возврата (новая строка) в тексте

В NSTextStorage я вставляю строки времени в текущем месте указателя, как это:

            NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: @"00:00:00"];
            [attrString autorelease];
            int pos = [self selectedRange].location;
            [[self textStorage] insertAttributedString: attrString atIndex:pos];

Пока все хорошо, работает отлично. Но теперь я хочу расположить указатель в начале следующей строки. Очевидно, это сразу после следующего возврата символа.

Теперь, как найти следующий символ возврата в textStorage и разместить указатель там? Я не нашел никаких подсказок в сети для этой задачи. Пожалуйста помоги...

1 ответ

Вы не найдете способ установить курсор (точнее: выделение с нулевой длиной) в NSTextStorageAPI, потому что это хранилище, не имеющее выбора. Выбор является свойством текстового представления. Это результат MVC. Просто сделайте проверку: у вас может быть много видов текста, отображающих один и тот же текст. Очевидно, что каждому нужен свой выбор.

Что вам нужно сделать, это получить позицию следующего абзаца (это лучше, чем поиск \n) и установите это как выбор для текстового представления.

NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: @"00:00:00"];
[attrString autorelease]; // You should *really* use ARC
int pos = [self selectedRange].location;
[[self textStorage] insertAttributedString: attrString atIndex:pos];

// Get the next paragraph
NSString *text = self.textStorage.string;
NSRange restOfStringRange = NSMakeRange( pos, [text length]-pos );
NSUInteger nextParagraphIndex;

// You have to look to the start of the next paragraph
[text getParagraphStart:&nextParagraphIndex end:NULL contentsEnd:NULL forRange:restOfStringRange];

NSTextView *view = self.textView; // Or where ever you get it from
view.selectedRange = NSMakeRange(nextParagraphIndex, 0);

Напечатано в Safari, не проверено, просто чтобы показать базовый подход.

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