swift 可重用单元格如何与ViewModel一起工作

cedebl8k  于 2023-01-04  发布在  Swift
关注(0)|答案(1)|浏览(101)

首先,我找不到与这个问题相关的SO的任何答案,我也不确定我的代码是如何工作的,或者我是否违反了reusable cell规则。
场景:我有一个简单的tableView,它有30个单元格,每个单元格都有自己的ViewModel类,ViewModel存储在一个数组中,根据ViewModel的属性排序; var number: Int,表示tableView必须始终显示正确排序的数据。
问题:
1.如果我传递一个ViewModel给每个可重用的单元格,那么每个可重用的单元格如何记住要使用哪个ViewModel?因为每个单元格并没有停留在相同的位置上吗?(我的tableView显示的结果总是正确的)
1.自从我将a reference type ViewModel传递给每个可重用单元格后,tableView是否创建了纯30个单元格而没有重用任何单元格?
代码:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    Constant.dummyViewModels.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TestTableViewCell", for: indexPath) as! TestTableViewCell

    cell.config(Constant.dummyViewModels[indexPath.row])

    return cell
}
rjee0c15

rjee0c151#

假设表格视图的高度允许在任何给定时间显示8个单元格。当您滚动时,屏幕顶部的一个单元格消失,底部出现一个单元格。
因此,表格视图必须创建至少8个单元格,每个单元格对应一个当前可见的单元格。例如,当您滚动时,底部出现一个新行,表格视图将重用顶部最近滚动出视图的单元格。然后,表格视图调用cellForRowAt,并使用一个索引路径表示底部的行。然后,使用适当的数据配置该单元格。
当一个单元格在屏幕上时,它已经通过cellForRowAt进行了配置,表格视图只是在你滚动时上下移动视图。一旦它离开屏幕,它可以根据需要重新用于另一行。
有了它,你的问题就可以得到回答:
1.每个可见单元格(本例中为全部8个单元格)在可见时都已为特定行配置。单元格“记住”哪个视图,因为它只显示上次配置的视图模型。
1.表格视图重用了单元格。它没有为30行创建30个单元格。例如,它只创建了8个单元格,因为这是可见行数所需的数量。它不关心您是否将视图模型传递给每个可见单元格。每个可重用单元格将使用您在cellForRowAt中给予的任何适当的视图模型进行配置。
简而言之,您对表视图单元格的使用还不错,至少就您在问题中所展示的重用而言。

相关问题