tableView.reloadData和tableView.reloadRows有什么区别?

6

tableView.reloadData()tableView.reloadRows(at: [IndexPath],with: .none)有什么区别?

我知道在tableView.reloadData()之后,所有的单元格都会重新加载。


我尝试了以下方法。

cell.count = 2

indexPath = [0,0] and [0,1]

tableView.reloadRows(at: [[0,0] as IndexPath],with: .none)
tableView.reloadRows(at: [[0,1] as IndexPath],with: .none)

然而,它并没有如预期那样产生结果。

使用tableView.reloadRows()重新加载单元格和使用tableView.reloadData()重新加载时,行为是否有所不同?


1
"它并没有产生预期的结果" - 发生了什么?也就是说,当你调用 reloadRows 时出了什么问题? - Papershine
我写了一个动画。 但是,这并不重要。reloadDatareloadRows 内部实现有什么区别? - Junya Kono
1个回答

4
请查看苹果文档 - 1. reloadData() : 重新加载表视图的行和区域。 描述:调用此方法以重新加载用于构建表格的所有数据,包括单元格、区域标题和脚注、索引数组等。为了提高效率,表视图仅重新显示可见的行。如果表格因重新加载而缩小,则会调整偏移量。当表视图希望完全重新加载其数据时,其委托或数据源调用此方法。不应在插入或删除行的方法中调用它,尤其是在使用beginUpdates()和endUpdates()调用实现的动画块内部。 2. reloadRows(at:with:) : 使用动画效果重新加载指定的行。 描述:
重新加载行会导致表视图向其数据源请求该行的新单元格。表格将新单元格作为旧行退出时进行动画处理。如果要通知用户单元格的值正在更改,请调用此方法。但是,如果通知用户并不重要 - 也就是说,您只想更改单元格显示的值 - 您可以获取特定行的单元格并设置其新值。
当在由beginUpdates()和endUpdates()方法定义的动画块中调用此方法时,它的行为类似于deleteRows(at:with:)。UITableView传递给方法的索引是在任何更新之前表视图的状态中指定的。这发生在动画块内插入、删除和重新加载方法调用的任何顺序中。 https://developer.apple.com/documentation/uikit/uitableview/1614862-reloaddata https://developer.apple.com/documentation/uikit/uitableview/1614935-reloadrows

我没有看到答案,有什么区别。忽略动画和如果您指定重新加载所有行。 - jesse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接