如何处理用UISearchBar和UITableView搜索单词?

时间:2013-01-07 23:17:57

标签: objective-c uitableview search uisearchbar words

我是UISearchBar的新手,我有一些搜索单词的代码。

- (void)searchTableView
{
NSLog(@"Searching...");
NSString *searchText = searchBar.text;

NSMutableArray *tempSearch = [[NSMutableArray alloc] init];

for (NSDictionary *item in items) {

    if ([[item objectForKey:@"en"] isEqualToString:searchText]) {
        NSLog(@"Found");

        [tempSearch addObject:item];
    }
}

searchArray = [tempSearch copy];
}

它有效,但问题是它只适用于完整的单词(例如,如果在textLabelUITableViewCell是文本“某事”而我在UISearchBar中输入“某事物”,那么我就是得到这一行返回,但当我输入“some”时,我有行,当完整的单词是“some”时,“某些东西”没有显示)。如何使用我的方法搜索文本?

2 个答案:

答案 0 :(得分:1)

使用NSPredicate可以简化您的搜索:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"en BEGINSWITH %@", searchText];
NSArray *tempSearch = [items filteredArrayUsingPredicate:predicate];

如果您想要不区分大小写的搜索,请将BEGINSWITH替换为BEGINSWITH[c]

有关详细信息,请参阅“谓词编程指南”中的Using Predicates

答案 1 :(得分:0)

好的,我有一些东西,但不是100%正确。

for (NSDictionary *item in items) {

    NSRange range = [[item objectForKey:@"en"] rangeOfString : searchText];
    if (range.location != NSNotFound) {

        NSLog(@"Found");

        [tempSearch addObject:item];
    }
}

当我输入“e”时,我有“某些”,“某事物”,“其他” - 我认为只有“其他”才会被退回。

好的我已经知道了。

    if (range.location != NSNotFound && range.location == 0) {