在 uitableviewcell 中更新标签文本而不重新加载整个表格

Posted

技术标签:

【中文标题】在 uitableviewcell 中更新标签文本而不重新加载整个表格【英文标题】:Update label text in uitableviewcell without reloading the entire table 【发布时间】:2014-10-12 13:52:37 【问题描述】:

我正在构建一个应用程序,在两个不同的部分中列出所有实时和今天(非实时)比赛:

section 0
live 1
live 2
section 1
today 1 (not live yet)
today 2
.....

每个表格单元代表一场比赛,其中列出了两支球队。如果是现场比赛,我有两个标签(一个对应于每支球队),显示现场比分。

对于现场比赛,因为在特定运动类别中可以有任意数量的现场比赛,我有两个标签显示在任何给定时刻每次的得分。由于实时比赛中的分数经常变化,所以我使用套接字来获取数据,当数据通过回调到达套接字时,我需要更新其标签中每个匹配单元格的分数标签。

如何在不重新加载整个表格的情况下获取每个单元格的标签实例并更新其文本?由于单元格是动态原型,有什么方法可以维护所有标签的引用?

我该如何实现这个功能?请注意,在任何时间点,一场比赛都可能开始直播并从今天变为直播,反之亦然(如果比赛被取消)。

【问题讨论】:

【参考方案1】:

试试

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

indexPaths 采用一个数组,其中包含要重新加载的行的索引路径,例如如果您只想重新加载第一部分调用中的第一行:

[self.tableView reloadRowsAtIndexPaths:[NSIndexPath indexPathForRow:0 inSection:0] withRowAnimation:UITableViewRowAnimationNone]

【讨论】:

我需要使用以下命令来使其工作: NSMutableArray *indexPathArr = [[NSMutableArray alloc] init]; [indexPathArr addObject:indexPath];然后像这样调用它: [self.tableView reloadRowsAtIndexPaths:indexPathArr withRowAnimation:UITableViewRowAnimationNone];它在 ios 9.1 (8.0+) 中就像一个魅力,谢谢!【参考方案2】:

斯威夫特版本

转到您拥有 tableView 的班级并执行以下操作:

let singleIndexPath = IndexPath(row: 0, section: 0)
self.tableView.reloadRows(at: [singleIndexPath], with: .none)

【讨论】:

以上是关于在 uitableviewcell 中更新标签文本而不重新加载整个表格的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 更新 UILabel 文本时 UITableViewCell 跳转

旋转 UITableView 时更新 UITableViewCells 的问题

从 UITableViewCell 中点击 Swift 更改标签文本颜色

如何动态调整 UITableViewCell 内的两个文本标签宽度?

使用发件人标签在 UIbutton 单击事件时更新 UITableViewCell 的标签

是否有带有标签和文本字段的可重用 UITableViewCell?