0

我正在尝试用黄色边框突出显示 UICollectionView 中选定的集合单元格,以便用户可以看到当前选择了哪一个。我试过这个:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    FilterCell *filterCell = (FilterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"FilterCell" forIndexPath:indexPath];
    filterCell.window.backgroundColor = [UIColor yellowColor];
    filterCell.backgroundColor = [UIColor yellowColor];

    NSLog(@"hello");
}

UICollectionViewCell 内的 UIImageView 周围有 2 个空像素,因此它应该可以工作,但不能。

它正在记录“你好”,但边框保持黑色。看这个截图:

在此处输入图像描述

4

4 回答 4

12

您以错误的方式获取单元格

FilterCell *filterCell = (FilterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"FilterCell" forIndexPath:indexPath];

将使当前未使用的单元出列或分配具有指定标识符的新单元。

采用

FilterCell *filterCell = (FilterCell *)[collectionView cellForItemAtIndexPath:indexPath];

反而。

无论如何,更清洁的解决方案是设置单元格的backgroundViewselectedBackgroundView属性,而不触及backgroundProperty颜色(将保持clear默认)。通过这种方式,您可以避免委托方法并实现相同的行为。

于 2013-04-07T18:28:37.770 回答
1

做一个reloadItemsAtIndexPaths: 代替,然后在 cellForItemAtIndexPath 中,检查 [[collectionView indexPathsForSelectedItems] containsObject:indexPath]如果为真,则在此处更改单元格的属性。

于 2013-04-07T18:28:43.690 回答
0

这可能会帮助您:

cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOUR_FILE_NAME.png"]];
于 2014-10-09T10:00:35.620 回答
0

- 此代码可以帮助您更改所选单元格的背景颜色

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView    cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cvCell" forIndexPath:indexPath];

if (cell.selected) {
 cell.backgroundColor = [UIColor blueColor]; // highlight selection 
}
else
{
 cell.backgroundColor = [UIColor redColor]; // Default color
}
return cell;
}

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

UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath];
datasetCell.backgroundColor = [UIColor blueColor]; // highlight selection
}  
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *datasetCell =[collectionView cellForItemAtIndexPath:indexPath]; 
datasetCell.backgroundColor = [UIColor redColor]; // Default color
}
于 2015-10-17T06:40:34.327 回答