选中时突出显示收集单元格

时间:2013-04-07 18:24:24

标签: ios objective-c uicollectionview uicollectionviewcell

我正在尝试使用黄色边框突出显示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个空像素,所以它应该可以工作,但事实并非如此。

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

enter image description here

4 个答案:

答案 0 :(得分:12)

你正在以错误的方式获取单元格

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

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

使用

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

代替。

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

答案 1 :(得分:1)

执行reloadItemsAtIndexPaths:然后在cellForItemAtIndexPath中检查[[collectionView indexPathsForSelectedItems] containsObject:indexPath]是否为true,更改单元格的属性。

答案 2 :(得分:0)

这可能会对您有所帮助:

cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YOUR_FILE_NAME.png"]];

答案 3 :(得分: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
}