在UISearchBar中搜索第二个单词

时间:2012-05-25 18:47:17

标签: objective-c xcode uitableview uisearchbar

我用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]];
}

我该如何解决这个问题?

任何帮助或建议都将不胜感激!

1 个答案:

答案 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];
}