Перейти к определенной строке в UITextView - PullRequest
3 голосов
/ 11 июля 2011

Как я могу сказать UITextView установить курсор на определенную строку (строка 13, например), когда она появляется?

1 Ответ

5 голосов
/ 11 июля 2011

UITextView имеет метод setSelectedRange: (NSRange) range.

Если вы знаете, где в строке 13 находится строка, скажем, местоположение 237, то выполните: [textView setSelectedRange: NSMakeRange (237,0)];

Если вам нужно выяснить, где находится строка 13, у вас впереди еще много работы. Я бы начал с рассмотрения sizeWithFont, помня, что нужно убрать примерно 16 точек от ширины вашего textView, чтобы iOS правильно вычисляла суммы. (Тем не менее, если у вас есть разрывы строк, просто найдите расположение 13-го (или n-го) "\ n".)

Обновление по вашему запросу в комментарии

Существует множество способов найти положение nth \ n. Следующий фрагмент не симпатичен, но он сделает свою работу. Вы также можете использовать rangeOfString и перебирать «\ n». В этом фрагменте, если целевая строка больше, чем количество строк, курсор помещается в конец. Код здесь предполагает, что у вас есть свойство UITextView с именем userEntry.

int targetLine = 3; // change this as appropriate 0=first line

NSRange range;

NSString* exampleString = @"Hello there\nHow is it going?\nAre you looking for a new line?\nA new line in what?\nThat remains to be seen";

NSArray* separateLines = [exampleString componentsSeparatedByString:@"\n"];

if (targetLine < [separateLines count])
{
    int count = 0;
    for (int i=0; i<targetLine; i++)
    {
        count = count + [[separateLines objectAtIndex:i] length] + 1; // add 1 to compensate \n separator
    }

    range = NSMakeRange(count, 0);
}
else
{
    range = NSMakeRange([exampleString length], 0); // set to the very end if targetLine is > number of lines
}

[[self userEntry] setText: exampleString];
[[self userEntry] setSelectedRange:range];
[[self userEntry] becomeFirstResponder];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...