CollectionViewCell在滚动时随机创建

时间:2014-06-28 15:02:17

标签: ios uikit uicollectionview uicollectionviewcell

点击一个细胞后,我的细胞会将背景变为黄色。当背景为黄色时,它将恢复为默认颜色。

一切正常,但是如果我开始滚动一些单元格会将backgroundColor更改为黄色,尽管它没有被选中。不幸的是,它有随机行为。

我更改了使用alloc init创建单元格,但现在,它会抛出一个错误,上面写着:

cells must be retrieved by calling -dequeueReusableCellWithReuseIdentifier:forIndexPath:

我使用故事板来处理单元格中的元素并使用它们

 UICollectionViewCell *cell = [collectionView
                              dequeueReusableCellWithReuseIdentifier:@"Number Cell"
                              forIndexPath:indexPath];




UILabel *label = (UILabel *)[cell viewWithTag:100];
label.text = [NSString stringWithFormat:@"%i", indexPath.item + 1];

有什么建议吗?

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

    UICollectionViewCell *cell = [collectionView
                                  dequeueReusableCellWithReuseIdentifier:@"Number Cell"
                                  forIndexPath:indexPath];


    UILabel *label = (UILabel *)[cell viewWithTag:100];
    label.text = [NSString stringWithFormat:@"%i", (int)indexPath.item + 1];

    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView
didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];


        if ([cell.backgroundColor isEqual:[UIColor yellowColor]]) {

            cell.backgroundColor  = [UIColor clearColor];
        } else {    

            cell.backgroundColor  = [UIColor yellowColor];           
        }

}

我认为,

- (void)collectionView:(UICollectionView *)collectionView
    didSelectItemAtIndexPath:(NSIndexPath *)indexPath
每当我点击一个单元格时都会调用

。因此,当颜色清晰时,我将颜色更改为黄色,反之亦然。

1 个答案:

答案 0 :(得分:0)

如果您在单元格的setSelected:方法中设置黄色背景颜色,则会自动执行此操作,假设您有人在调用{{1}时将其恢复正常}}

如果这不起作用,您可以在出单后或单元格的[cell setSelected:NO]方法中重置单元格的背景颜色。