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

Posted

技术标签:

【中文标题】UITableView 中的搜索栏不显示单元格标签中的文本【英文标题】:Search Bar in UITableView doesn't display text in Cell label 【发布时间】:2013-12-28 00:58:50 【问题描述】:

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

- (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??”时,它甚至不会显示文本而不是数组[行]。

【问题讨论】:

【参考方案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"];

如果您对搜索结果表使用自定义单元格,那么您应该使用类似于我已注释掉的行的内容,并为该自定义单元格注册笔尖。

【讨论】:

我会试试看的!谢谢!在我这样做之前并避免进一步的问题:我可以为我的原始表格视图和可搜索的表格视图使用相同的原型单元格标识符吗?我注意到您将“Cell”用于原始视图,将“searchCell”用于可搜索的表格视图。我有一个带有标签的原型单元格,我想同时使用它。这可能吗? 什么都试过了,我得到了:原因:'无法使标识符为 songCell 的单元格出列-必须为标识符注册一个 nib 或一个类,或者在情节提要中连接一个原型单元格'我使用的是相同的选择器(songCell),但我没有为该自定义单元格注册笔尖。我假设由于原始表格视图加载良好而无需注册笔尖,我可以对可搜索的表格视图执行相同的操作。抱歉,我是 Objective-C 的新手,我觉得我在问一个愚蠢的问题。 我注册了我正在使用的自定义类:[self.searchDisplayController.searchResultsTableView registerClass:[songViewCell class] forCellReuseIdentifier:@"songCell"];如您所说,在 ViewDidLoad 中使用相同的选择器。这次没有错误,但标签仍然是空白的。 @mannibis,我过去曾尝试过为两者使用相同的单元格,但遇到了麻烦。你有没有像我展示的那样尝试过——只是注册一个 UITableViewCell? 是的,但正如预期的那样,songLabel 不存在于那个超类中,只是在我有 UILabel 出口的我的 songCellView 子类中。我想我必须以编程方式创建一个标签并将其放置在 searchResultsTableView 视图中。我该怎么做呢?

以上是关于UITableView 中的搜索栏不显示单元格标签中的文本的主要内容,如果未能解决你的问题,请参考以下文章

问:如何更改 UITableView 中的单元格大小,以显示所有标签?

iOS 搜索栏不显示结果

UITableView 单元格标签在滚动时截断

UITableView 单元格不显示正确的详细信息

UITableView 单元格中的动态形状(Swift)

在 UITableView 单元格 iOS Swift 中突出显示搜索结果