当你不在cellForRowAtIndexPath方法中使用dequeueReusableCellWithIdentifier时,我想知道到底发生了什么。 在我合作的一个项目中,我们有不同类型的自定义UITableViewCell,它们都出现在一个单独的tableview中。所以这里我们用所有应该显示的TableCell填充数组。这些数组不是很大(10-15个单元格),所以对我们来说这种方式甚至不使用dequeueReusableCellWithIdentifier的任何标识符。接下来的问题是如何使用标识符resp。在UITableView的单个部分中使用不同的单元格时,dequeueReusableCellWithIdentifier。有人在这里可以解释一下,背景究竟发生了什么?关心Nils
答案 0 :(得分:4)
dequeueReusableCellWithIdentifier
让我想起Flyweight pattern
由于单元格的分配和实例化可能是一项昂贵的任务,因此使用此机制,您有机会仅创建第一个可见单元格,稍后只需更改其内容即可重复使用它们。滚动动画必须尽可能快,以便为用户提供良好的体验
这值得么?是的,它基本上是免费的,我们只需要注意一些旧的数据仍然可以存在于新的可视化中,诀窍是始终正确实现方法-prepareForReuse()
,在这里,你最终可以擦除所有显示的设置新数据之前的数据
如果你想在同一部分使用不同的单元格是绝对可能的,如果它们有不同的高度。您只需要为每个单元格创建一个不同的单元格标识符,并将它们与您的数据联系起来
我通常映射要在struct(swift)或字典中显示的数据以及要使用的单元标识符的键。
如果您在滚动时表示自己的单元格类型,则应dequeue
。