4

我有一个 UICollectionViewController 和我的自定义单元格,在我的 cellForRowAtIndexPath: 方法中,我根据 indexPath.row 设置单元格。但是我得到了错误的结果,这个单元格即使在第一个位置之后也会出现,如果你来回滚动,它会在随机位置弹出。我该如何解决?

这是代码:

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

    cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    if (indexPath.row == 0)
    {
        cell.imageView.image = [UIImage imageNamed:@"something1.png"];
        cell.buyLabel.text = @"170";
        cell.textLabel.text = @"11.2011";
    }

    return cell;
}
4

4 回答 4

4

UITableView 和 UICollectionView 中的单元格都会被回收,这意味着当一个人离开屏幕时,它会被放入一个 NSSet 中,直到您再次需要它为止。当它需要时,它会从在 UICollectionView 视图层次结构中再次添加的集合广告中删除。如果您不清除单元格内的值或重新设置它们,则单元格将在创建时显示相同的数据。
这是出于性能原因创建单元格需要更多时间而不是再次重视它们。
如果您的问题出在布局中,请检查布局流对象,您设置了哪个尺寸?

于 2013-06-29T10:58:50.097 回答
1

我发现了问题,一旦设置了单元格内容,它就再也没有被清理过。所以我添加了清理每个单元格属性作为附加条款,它工作正常。

于 2013-06-29T10:45:39.160 回答
1

prepareForReuse如果您在自定义单元实现中覆盖,您可以执行任何必要的清理以准备再次使用视图。

于 2013-06-29T14:29:28.370 回答
0

此 SO 帖子中的答案之一有帮助:覆盖prepareForReuse并将单元格重置为其默认状态。别忘了打电话super.prepareForReuse

于 2016-04-10T08:55:01.260 回答