【问题标题】:set selected tag for collectionView为 collectionView 设置选定的标签
【发布时间】:2013-06-18 02:53:56
【问题描述】:

我做了一个 UICollectionView,里面有一些单元格,它显示正确,现在我想为一个或多个单元格设置一个选定的标签,在自定义单元格中,我可以使用两种方法来实现它:

方式一:设置selectedBackgoundView

self.selectedBackgroundView = backgroundView;  

方式2:添加一个UIImageView作为选中标签

[_coverImageView addSubview:_selectImageView];
//coverImageView is image for cell,
//selectImageView is a tag imageView for selected.

那么问题来了:

例如我选择了第一个单元格,当我滚动 UICollectionView 时,方式 1 仍然显示选择的第一个单元格,但使用方式 2,_selectImageView 将添加到另一个单元格。

我知道是Reuse Cell造成的,但不知道如何处理。

【问题讨论】:

    标签: ios uicollectionview


    【解决方案1】:

    您应该在创建单元格之后添加您选择的标签,而应在创建时添加它。

    您没有说明如何创建自定义集合视图单元格,但听起来好像您可能没有使用自己的子类,只是将您需要的内容添加到普通的 UICollectionViewCell 中。您会发现创建自己的子类要容易得多,并使用可以根据需要启用/禁用的图像视图进行设置。您可以完全在代码中创建自定义单元格,也可以与 XIB 结合使用 - 无论您喜欢哪种方式。

    【讨论】:

    • 为什么不分享您用于创建单元格的代码?
    【解决方案2】:

    最近我正在做一个类似的项目。虽然是很久以前的事了,但还是希望能帮到需要的人。

    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    
    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:collectionCellID forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[MyCollectionViewCell alloc]init];
    }
    //Change Selected State
    if([[collectionView indexPathsForSelectedItems] indexOfObject:indexPath] != NSNotFound){
        UIView *bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 250, 250)];
        bgView.backgroundColor = kLightBlueColor;
        [cell setSelectedBackgroundView:bgView];
        cell.selected = YES;
    }
    cell.title.text = @"Hello World";
    
    return cell;  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2017-02-18
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多