我有一个带有大文本的textview,我想在其中找到所有出现的字符串(搜索),每次按下搜索时都会将textView滚动到当前事件的范围。
感谢
答案 0 :(得分:6)
要对文字视图进行转发搜索,请使用以下代码段 -
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
。