搜索整个UITableView单元的UISearchBar

时间:2013-01-19 22:55:10

标签: ios objective-c xcode uisearchbar

我有一个基于搜索栏过滤的tableview。只要搜索以与单元格文本相同的字符开头,这就可以正常工作。

我希望能够搜索单元格文本的任何部分,即使在中间也是如此。例如。如果单元格文本是“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];
        }
    }
}

任何帮助都会很棒。谢谢大家!

1 个答案:

答案 0 :(得分: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];
}