在TextView中搜索字符串的出现次数

时间:2011-06-26 03:50:21

标签: objective-c ios xcode cocoa-touch

我有一个带有大文本的textview,我想在其中找到所有出现的字符串(搜索),每次按下搜索时都会将textView滚动到当前事件的范围。

感谢

1 个答案:

答案 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