不是cellForItemAtIndexPath中的唯一单元格:

时间:2014-10-09 14:27:15

标签: ios cocoa-touch uicollectionview uicollectionviewcell

在这些方面真正发生了什么

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

  MenuCollectionViewCell *cell = (MenuCollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier
                                                                                                     forIndexPath:indexPath];

特别是在细胞系上?

据我了解,当我滚动集合视图,显示不可见的新单元格,结果隐藏了可见的单元格时,iOS会重复使用单元格中那些离开屏幕的单元格来绘制新单元格,对吗?

问题是:如果我基于indexPath自定义特定单元格,我将重复该自定义。例如,如果我将一个单元格的标签设置为红色,那么只要我滚动集合视图并且单元格已经出列并重复使用,我就会有很多带有红色标签的单元格。

如何防止这种情况发生?

3 个答案:

答案 0 :(得分:3)

覆盖[UICollectionViewCell prepareForReuse]并重置方法中的所有自定义项。

答案 1 :(得分:1)

您可以在cellForRowAtIndexPath中清除它们,然后为新的indexPath配置单元格,或者如果您有UITableViewCell的自定义子类,则覆盖prepareForReuse方法并在那里清除它。请参阅Apple doc

修改 对不起,您正在使用集合视图而不是表视图,但同样适用。

答案 2 :(得分:0)

覆盖prepareForReuse以重置资源,当单元格滚出框架时将调用它

不要忘记呼叫超级方法