我用tableview + searchbar创建了一个视图。如果在字符串中搜索第一个单词,它就能完美运行!不幸的是,如果在字符串中搜索不同的单词,它将不起作用。所以,如果我想搜索文本:bal。
我会看到以下字符串:green bal。它找不到任何东西。
我目前正在使用此代码将搜索栏文本与数据进行比较:
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
[self.filteredListContent removeAllObjects]; // First clear the filtered array.
for (Product *product in self.listContent)
{
NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.filteredListContent product];
}
}
NSMutableSet *tempSet = [NSMutableSet setWithArray:self.filteredListContent];
self.filteredListContent = [NSMutableArray arrayWithArray:[tempSet allObjects]];
}
我该如何解决这个问题?
任何帮助或建议都将不胜感激!
答案 0 :(得分:2)
此代码使用compare:options:range:
中的NSString
方法查找完全匹配(对大小写和变音符号不敏感):
NSComparisonResult result = [product.name compare:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
if (result == NSOrderedSame)
{
[self.filteredListContent product];
}
鉴于您的问题描述,您希望确定字符串包含在另一个字符串中。请改用rangeOfString:options:
中的NSString
方法:
NSRange range = [product.name rangeOfString:searchText options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
if (range.length > 0)
{
[self.filteredListContent product];
}