我是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];
}
它有效,但问题是它只适用于完整的单词(例如,如果在textLabel
中UITableViewCell
是文本“某事”而我在UISearchBar
中输入“某事物”,那么我就是得到这一行返回,但当我输入“some”时,我有行,当完整的单词是“some”时,“某些东西”没有显示)。如何使用我的方法搜索文本?
答案 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) {