0

我有一个基于搜索栏过滤的表格视图。只要搜索以与单元格文本相同的字符开始,这就会很好地工作。

我希望能够搜索单元格文本的任何部分,即使是在中间。例如。如果单元格文本是“Jon Bon Jovi”,如果用户在搜索栏中键入“Bon Jovi”甚至只是“Jovi”,我希望它仍然出现。

我当前的代码如下:

for (NSDictionary *item in listItems)
{

    if ([scope isEqualToString:@"All"] || [[item objectForKey:@"type"]  
    isEqualToString:scope] || scope == nil)
    {
        NSComparisonResult result = [[item objectForKey:@"name"] 
        compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) 
        range:NSMakeRange(0, [searchText length])];

        if (result == NSOrderedSame)
        {
            [filteredListItems addObject:item];
        }
    }
}

任何帮助都是极好的。谢谢你们!

4

1 回答 1

3

不要使用-compare:options:range:(它只是根据您的项目名称对搜索字符串进行排序),而是考虑查看-rangeOfString:options:- 这实际上会在整个项目名称中搜索您的搜索字符串。您可以用以下内容替换if语句的内部主体:

NSStringCompareOptions opts = (NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch);
NSRange resultRange = [[item objectForKey:@"name"] rangeOfString:searchText
                                                         options:opts];
if (resultRange.location != NSNotFound) {
    [filteredListItems addObject:item];
}
于 2013-01-19T23:02:09.023 回答