我有一个带有搜索栏的UITableView&搜索显示控制器。我的代码似乎是正确的但是当我输入搜索栏时,我没有得到任何结果。 UITableView保持不变。
我的segue是正确的,因为它仍然正确地传递数据 下一个VC就好了。
赞赏正确的方向。
**注意:我发现searchDisplayController从iOS8开始不推荐使用,但我想知道这一点。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (tableView == self.searchDisplayController.searchResultsTableView) {
return [searchResults count];
} else {
return [bands count];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"BandCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.textLabel.text = [searchResults objectAtIndex:indexPath.row];
} else {
cell.textLabel.text = [bands objectAtIndex:indexPath.row];
}
return cell;
}
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller
shouldReloadTableForSearchString:(NSString *)searchString {
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
修改
我注意到searchBar没有连接。当我连接它时,我注意到每当我点击它时,搜索栏就会消失。看起来搜索栏在导航栏后面消失了。那是后来的另一个问题。
我仍然无法让表格正确更新。
来源:Source
修改
在旁注中,我弄清楚为什么我的搜索栏消失了。当我的导航栏嵌入标签栏时,我的标签栏嵌入了导航控制器。
所以:标签栏 - >导航控制器
添加以下代码会阻止我的搜索栏向上移动并重叠状态栏
self.definesPresentationContext = YES;
修改
不确定原因,但我注意到我的搜索栏/搜索控制器未正确连线。我删除它并将其添加回来,所有内容都正确连接。具体做法是:
searchDisplayController未连接到Band列表。
答案 0 :(得分:0)
此方法是否称为searchDisplayController的委托方法---
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
[self filterContentForSearchText:searchString
scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
objectAtIndex:[self.searchDisplayController.searchBar
selectedScopeButtonIndex]]];
return YES;
}
以及您是否在此行中进行数据
searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
答案 1 :(得分:0)
替换以下方法。它可能会帮助你
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = [bands filteredArrayUsingPredicate:resultPredicate];
[self.tableView reloadData]; //add tableview reloadData
}
答案 2 :(得分:0)
总而言之,我的代码是正确的。我的搜索栏/搜索控制器未正确连线。删除它并将其添加回来可以正确连接所有内容。我的原帖中有更多信息。