UITableView中的搜索栏不会在单元格标签中显示文本

时间:2013-12-28 00:58:50

标签: objective-c uitableview ios7 xcode5 uisearchbar

这是魔法没有发生的地方:

- (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]。

1 个答案:

答案 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。