单行 UITableView 直到滚动才显示 detailTextLabel

Posted

技术标签:

【中文标题】单行 UITableView 直到滚动才显示 detailTextLabel【英文标题】:Single-row UITableView doesn't show detailTextLabel until scroll 【发布时间】:2014-11-12 19:43:16 【问题描述】:

我有一个 UITableView,通过情节提要创建,单元格样式设置为“Right Detail”。当且仅当满足以下任一条件时,这将正确显示 textLabel 和 detailTextLabel:

表格视图中有不止一行 我将单元格滚动出屏幕(显然它只是在滚动后反弹回来,因为它是唯一的项目,但现在它显示正确) 我触摸(突出显示)该项目 我切换到不同的视图并返回(这是一个标签视图应用程序)

但是,如果我只有一个没有做任何事情的条目,则只会显示 textLabel。

我的代码相当基本。我有一个数组,我用制表符分隔的 textLabel/detailTextLabel 值填充该数组。然后,在我的 tableView:cellForRowAtIndexPath: 函数中,我有以下代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"];

    NSDictionary *itemDict=[scanArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text=[itemDict valueForKey:@"quantity"];
    cell.textLabel.text=[itemDict valueForKey:@"item"];

    [cell setNeedsLayout];
    [cell setNeedsDisplay];

    return cell;

每当我对 scanArray 对象进行更改时,我都会在我的表视图上调用 reloadData 函数。这显然有效,因为 textLabel 确实显示在 tableview 中,但是如前所述,detailTextLabel 没有(最初)。

编辑:请注意,表格的内容不是静态的 - 用户将在正常使用过程中添加和删除项目。很简单,问题仅在第一项添加到列表后立即发生。一旦用户将第二个项目添加到列表中(或执行我上面提到的任何其他操作),问题就会消失。

还有人指出,将我的数据存储为字典数组而不是制表符分隔的文本会更好。我同意,并将做出改变。

Edit2:表格响应用户单击按钮而更新。用户输入两个值(项目编号和数量),然后点击按钮。然后运行以下代码:

NSDictionary *itemDict=[NSDictionary dictionaryWithObjectsAndKeys:
                                self.ItemCode.text,@"item",
                                self.Quantity.text,@"quantity",
                                returnedData,@"id", nil];

[scanArray insertObject:itemDict atIndex:0]; //The most recent item is always the first item in the list.
[self.ItemCode setText:@""]; //clear out the entry fields
[self.Quantity setText:@""];

[self.HistoryTable reloadData]; //reload the table view.

我也对这里的数据做其他事情(特别是将其传输到服务器),但这与 tableView 无关。

【问题讨论】:

如果它只是表中的一行。你为什么不直接设置你想要的文本呢? cell.detailTextLabel.text = @"whatever"; @emotality 因为在添加另一个元素之前它只有一行。此外,我完全按照您的建议进行操作 - 我根据数组的内容将每个单元格的文本设置为我想要的。 检查我的回答,我评价的更好的方法。您只需为要添加的每个单元格在 tableContent 中添加 NSDictionary @emotality:我同意,使用字典数组是存储数据的更好方法。但是,如果只有一个项目,这并不能(我假设)解决 detailTextLabel 不显示的问题。 【参考方案1】:

我发现一个可行的解决方案是替换该行:

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"];

与:

UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"default"];

并从情节提要中删除原型单元。但是,我读到这不是最佳做法。

【讨论】:

以上是关于单行 UITableView 直到滚动才显示 detailTextLabel的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 保持突出显示,直到 UITableView 结束滚动

为啥直到在选项卡之间滚动才会显示 recyclerview 项目?

UITableView 单元格内容未正确显示

UITableView 调整 contentinset 直到第一次滚动

UITableCell 中的 UILabel 大小不正确,直到 UITableView 滚动

使用 UIImageView+AFNetworking,图像直到滚动才会出现