我正在尝试使用黄色边框突出显示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个空像素,所以它应该可以工作,但事实并非如此。
正在记录“你好”,但边框保持黑色。见这个截图:
答案 0 :(得分:12)
你正在以错误的方式获取单元格
FilterCell *filterCell = (FilterCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"FilterCell" forIndexPath:indexPath];
将使当前未使用的单元格出列,或者分配具有指定标识符的新单元格。
使用
FilterCell *filterCell = (FilterCell *)[collectionView cellForItemAtIndexPath:indexPath];
代替。
无论如何,更清晰的解决方案是设置单元格的backgroundView
和selectedBackgroundView
属性,而不触及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
}