我做了一个 UICollectionView ,里面有一些单元格并显示正确,现在我想为一个或多个单元格设置一个选定的标签,在自定义单元格中,我可以用两种方法来实现它:
方式1:设置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
将被添加到另一个单元格。
我知道它是由重用Cell 引起的,但不知道如何处理它。
答案 0 :(得分:0)
您应该在创建单元格时添加,而不是在之后添加所选标记。
您没有说明如何创建自定义集合视图单元格,但听起来好像您可能没有使用自己的子类,而只是简单地将所需内容添加到普通UICollectionViewCell
。您会发现创建自己的子类更加容易,并使用可以根据需要启用/禁用的图像视图进行设置。您可以完全在代码中创建自定义单元格,也可以与XIB一起创建自定义单元格 - 无论您喜欢哪种。
答案 1 :(得分:0)
最近我正在开展一个类似的项目。虽然很久以前,但我希望能帮助那些需要它的人。
- (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;
}