我有一个带有搜索栏的tableview,它应该在搜索栏中输入时将数据加载到单元格中。我的代码确实使用带回调的函数加载数据。将数据打印到控制台会显示正确的搜索结果,但在调用reloadData方法后,单元格不会刷新。当键入另一个字符并加载新数据时,tableview将刷新上一个请求中的数据。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return _teams.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"TeamCell";
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
TeamModel *team = _teams[indexPath.row];
cell.textLabel.text = team.name;
return cell;
}
- (void)searchBar:(UISearchBar *)theSearchBar textDidChange:(NSString *)searchText {
NSLog(@"%@", searchText);
poolDataHandler = [[PoolDataHandler alloc] init];
[poolDataHandler GetTeams:searchText completion:^(NSArray *tempteams) {
_teams = tempteams;
NSLog(@"%@", _teams);
[self.tableView reloadData];
}];
}
请注意,我正在使用模型类来解析JSON结果。
此外,似乎行计数确实更新,因为当结果小于上一个查询时,它会崩溃。对此有任何想法将不胜感激!
更新 当我取消搜索时,它会刷新初始结果。我必须遗漏一些基本的东西......
答案 0 :(得分:0)
傻傻的我,我不知道搜索栏和搜索显示器有自己的tableview ...以下对我有用,使用默认的重载功能,将其设置为不立即重新加载,然后手动重新加载正确的tableview in回调:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchText {
poolDataHandler = [[PoolDataHandler alloc] init];
[poolDataHandler GetTeams:searchText completion:^(NSArray *tempteams) {
_teams = tempteams;
[self.searchDisplayController.searchResultsTableView reloadData];
}];
return NO;
}