UITableView / UISearchBar 返回不正确的结果
Posted
技术标签:
【中文标题】UITableView / UISearchBar 返回不正确的结果【英文标题】:UITableView / UISearchBar Returns Incorrect Results 【发布时间】:2011-03-08 11:55:54 【问题描述】:我正在尝试在 UITableView 中实现搜索。搜索时,似乎返回了正确数量的结果,但我从结果中的原始故事数组中接收条目,而不是 searchResults。我可以看到 searchResults 数组应该是数据源,但是经过大量搜索后,我无法弄清楚如何使用 NSDictionaries 数组来实现它。任何帮助表示赞赏。
- (void)handleSearchForTerm:(NSString *)searchTerm
[self setSavedSearchTerm:searchTerm];
if ([self searchResults] == nil)
NSMutableArray *array = [[NSMutableArray alloc] init];
[self setSearchResults:array];
[array release], array = nil;
[[self searchResults] removeAllObjects];
if ([[self savedSearchTerm] length] != 0)
for (NSDictionary *currentItem in [self stories])
if ([[currentItem objectForKey:@"title"] rangeOfString:searchTerm options:NSCaseInsensitiveSearch].location != NSNotFound)
[[self searchResults] addObject:currentItem];
【问题讨论】:
【参考方案1】:[tableView isEqual:self.searchDisplayController.searchResultsTableView]
也是创建和管理自己的BOOL isFiltering;
变量的另一种选择
【讨论】:
【参考方案2】:使用 NSPredicate 进行过滤
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self.title MATCHES %@",searchTerm];
假设您的原始数组是“originalArray”,因此要获得过滤后的数组,请使用这两个全局变量
NSArray* filteredArray;
BOOL isFiltering;
现在在搜索栏委托方法中执行以下操作
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self.title MATCHES %@",searchTerm];
filteredArray = [[originalArray filteredArrayUsingPredicate:predicate] retain];
现在您需要更改您的表格视图委托和数据源,...对于您正在使用的所有地方
NSDictionary *currentString = [originalArray objectAtIndex:indexPath.row];
使用关注
NSDictionary *currentString;
if(isFiltering)
currentString = [originalArray objectAtIndex:indexPath.row];
else
currentString = [filteredArray objectAtIndex:indexPath.row];
【讨论】:
以上是关于UITableView / UISearchBar 返回不正确的结果的主要内容,如果未能解决你的问题,请参考以下文章
禁用添加到 UITableView 的 UISearchbar 的滚动
uisearchbar + uitableview + nsfetchedresultscontroller
UISearchBar 上方的 UITableView 部分
UISearchBar 未设置为 UITableView.tableHeaderView