Поиск вхождений строки в TextView - PullRequest
3 голосов
/ 26 июня 2011

У меня есть текстовое представление с большим текстом, и я хотел бы найти все вхождения строки (поиск) внутри него, и каждый раз, когда я нажимаю кнопку поиска, прокрутите textView до диапазона текущего вхождения.

спасибо

1 Ответ

6 голосов
/ 26 июня 2011

Чтобы выполнить прямой поиск в текстовом представлении, используйте следующий фрагмент -

NSRange textRange;
NSRange searchRange = NSMakeRange(0, [textView.text length]);

textRange = [textView.text rangeOfString:searchString 
                                 options:NSCaseInsensitiveSearch 
                                   range:searchRange];

if ( textRange.location == NSNotFound ) {
    // Not there
} else {
    textView.selectedRange = textRange;
    [textView scrollRangeToVisible:textRange];
}

В основном мы используем метод NSString s rangeOfString:options:range:, чтобы найти текст, а затемвыделите текст с помощью selectedRange и сделайте его видимым с помощью scrollRangeToVisible:.

Теперь, когда найден, вы можете найти следующее вхождение, изменив диапазон поиска.

if ( textRange.location + textRange.length <= [textView.text length] ) {
    searchRange.location = textRange.location + textRange.length;
    searchRange.length = [textView.text length] - searchRange.location;

    textRange = [textView.text rangeOfString:searchString 
                                     options:NSCaseInsensitiveSearch 
                                       range:searchRange];

    /* Validate search result & highlight the text */
} else {
    // No more text to search.
}

Вы также можете искать в обратном направлении, объявив

searchRange = NSMakeRange(0, textRange.location);

и затем передав (NSCaseInsensitiveSearch|NSBackwardsSearch) в options.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...