【发布时间】:2019-12-20 19:28:30
【问题描述】:
好的,情况如下:
我有一个集合视图,在cellForRow 中我使用dequeueReusableCell 重用单元格。在每个单元格上,我都有一个自定义的 UIView 对象,该对象被添加为子视图。
现在,在某种情况下,我必须完全重新布局集合视图。当这种情况发生时
- 从数据模型中清除所有项目
- 为所有可见单元格的索引路径调用
deleteItems - 致电
reloadData
此时集合视图是空的,并且没有显示任何单元格。
现在,如果我再次使用数据更新我的模型并重新加载集合视图 - 在 cellForRow dequeueReusableCell 返回重复使用的单元格/添加的 UIView 如上所述!/- 它不会初始化新的单元格对象,即使集合视图在当前更新之前是空的。我不确定这是否是预期的行为,或者我的代码中还有其他问题,但是我的问题是 - 如何达到我 reset 集合视图上的所有内容和 dequeueReusableCell 返回一个新的点初始化单元格对象。
【问题讨论】:
-
为什么需要一个新初始化的单元格对象?您可以在
prepareForReuse中进行任何您需要的重置。 -
行为正确。清除数据模型对单元池没有任何作用。您单元格中的代码和
cellForItemAt应该是无状态的;它应该始终根据模型执行配置单元所需的操作,无论它是新单元还是重用单元。 -
在
cellForRow从dequeueReusableCell获取单元格对象后,我正在初始化一个新的 UIView 实例并将其作为子视图添加到我的单元格中。为了避免每次我检查视图是否已存在时都初始化此视图,如果存在则跳过初始化新视图。但是,正如问题中所解释的,我需要有一种机制来重置所有内容。这是一个特殊事件,只有这样我才希望能够重新创建每个单元格及其对应的UIView实例,之后单元格重用将照常继续 - 不要在每次cellForRow调用时创建此视图
标签: ios swift uicollectionview