这是魔法没有发生的地方:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"songCell";
songViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
long row = indexPath.row;
if (cell == nil) {
cell = [[songViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
cell.songLabel.text = _searchResults[row];
} else {
cell.songLabel.text = _songListArray[row];
}
return cell;
}
我知道_searchResults数组填充了正确的搜索结果,并且我已经适当地编辑了numberOfRowsPerSection。过滤器工作正常,但在搜索栏中输入时不会显示_searchResults [row]文本。如果我不使用该栏,则使用_songListArray [row]正确填充单元格。
出现问题:
if (cell == nil) {
cell = [[songViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
如果我不包含if表达式,我会收到错误。在搜索栏正在使用时,我应该如何初始化原型单元?我得到的只是空标签,但我知道搜索是有效的,因为如果数组中没有过滤结果,表中间会显示“无结果”。为什么我的songLabel.text更新?当我将标签设置为@“HELLO ??”时,它甚至不会显示文本而不是数组[row]。
答案 0 :(得分:1)
您需要让searchResultsTableView将单元格出列,而不仅仅是主表视图。 cellForRowAtIndexPath方法应如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.tableView) {
RDTriangleCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = self.theData[indexPath.row];
return cell;
}else{
UITableViewCell *cell = [self.searchDisplayController.searchResultsTableView dequeueReusableCellWithIdentifier:@"SearchCell" forIndexPath:indexPath];
//RDCell *cell = [self.searchDisplayController.searchResultsTableView dequeueReusableCellWithIdentifier:@"SearchCell" forIndexPath:indexPath];
cell.textLabel.text = self.filteredData[indexPath.row];
return cell;
}
}
在viewDidLoad中,如果您使用上面显示的代码来标准UITableViewCell,则应该注册该类。
[self.searchDisplayController.searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"SearchCell"];
如果您使用自定义单元格作为搜索结果表,那么您应该使用我已注释掉的行,并为该自定义单元格注册nib。