Skip to content

Instantly share code, notes, and snippets.

@Eric-Bro
Created July 20, 2012 09:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Eric-Bro/3149836 to your computer and use it in GitHub Desktop.
Save Eric-Bro/3149836 to your computer and use it in GitHub Desktop.
[UI/NS]TextView old-school search
// textView - ваш NSTextView
// NSString *search_query - {глобальная переменная/член класса}
// строка, которую вам нужно найти
// NSRange result_range - {глобальная переменная/член класса}
// последние результаты поиска
// BOOL backwards_search - {глобальная переменная/член класса}
// поиск в обратном направлении?
//
/* "Главный" метод */
- (void)searchString:(NSString *)query
{
/*
Ищем ли мы новую строку
или следующее/предыдущее вхождение предыдущей?
*/
if (! [query isEqualToString: search_query]) {
search_query = query;
[self initialSearch];
} else {
[self continueSearch];
}
}
- (void)initialSearch
{
result_range = [textView.text rangeOfString: search_query
options: NSCaseInsensitiveSearch | (backwards_search * NSBackwardsSearch)
range: NSMakeRange(0, [textView.text length])];
[self showResults];
}
- (void)showResults
{
if (result_range.location == NSNotFound ) {
// не найдено
NSBeep();
NSLog(@"No such <%@> there", search_query);
search_query = nil;
} else {
// выделяем подстроку, пишем в лог, etc
NSLog(@"Found it at %d:%d", result_range.location, result_range.length);
}
}
- (void)continueSearch
{
BOOL can_perform_search = NO;
if (backwards_search && (result_range.location - result_range.length > 0))
{
result_range.length = result_range.location;
result_range.location = 0;
++can_perform_search;
} else if (!backwards_search && (result_range.location + result_range.length <= [textView.text length])) {
result_range.location += result_range.length;
result_range.length = [textView.text length] - result_range.location;
++can_perform_search;
}
if (can_perform_search) {
result_range = [textView.text rangeOfString: search_query
options: NSCaseInsensitiveSearch | (backwards_search * NSBackwardsSearch)
range: result_range];
[self showResults];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment