Buscar ocurrencias de una cadena en un TextView

Tengo una vista de text con un text grande, y me gustaría encontrar todas las apariciones de una cadena (búsqueda) dentro de ella y cada vez que presiono la búsqueda, desploop el textView hasta el range de la aparición actual.

Gracias

Para hacer una búsqueda avanzada en la vista de text, use el siguiente fragment:

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]; } 

Básicamente usamos el NSString rangeOfString:options:range: method de rangeOfString:options:range: para encontrar el text y luego resaltar el text usando selectedRange y hacerlo visible usando scrollRangeToVisible:

Una vez encontrado, puede encontrar la próxima aparición modificando el range de búsqueda.

 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. } 

También puede search hacia atrás declarando

 searchRange = NSMakeRange(0, textRange.location); 

y luego pasar (NSCaseInsensitiveSearch|NSBackwardsSearch) en las options .