我有一个基于搜索栏过滤的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];
}
}
}
任何帮助都会很棒。谢谢大家!
答案 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];
}