我有一个带有搜索栏和搜索显示控制器的UITableView。我的代码似乎是正确的,但当我输入搜索栏时,我没有得到任何结果。UITableView保持不变。
我的方法是正确的,因为它仍然正确地将数据传递给下一个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没有连接。当我连接它时,我注意到,每当我在搜索栏内点击时,搜索栏就会消失。看起来搜索栏在导航栏后面消失了。这是以后要讨论的另一个问题。
我仍然无法使表正确更新。
来源:来源
编辑
顺便提一句,我弄明白了为什么我的搜索栏会变坏。当我应该将导航条嵌入到选项卡栏中时,我将选项卡条嵌入到导航控制器中。
所以:选项卡->导航控制器
添加以下代码可以阻止我的搜索栏向上移动和重叠状态栏
self.definesPresentationContext = YES;
编辑
不知道为什么,但我注意到我的搜索栏/搜索控制器没有正确连接。我把它移走了,又加回去了,一切都正确地连接起来了。具体地说:

searchDisplayController没有连接到乐队列表。
发布于 2015-06-27 06:25:23
这个方法叫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];发布于 2015-06-27 08:51:33
替换下面的方法。可能对你有帮助
- (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
}https://stackoverflow.com/questions/31085680
复制相似问题