触摸时更改 UICollectionViewCell 的颜色
Change Color of UICollectionViewCell on touch
我在集合视图中有一组单元格,我想让它们像按钮一样工作。
当我点击一个单元格时,我希望该单元格突出显示,然后更改颜色。
我最初可以使用 cellForItemAtIndexPath
方法设置 collectionViewCell 中 view.backgroundColor 的颜色。然而,与我认为这样做会起作用的相反:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell: ButtonCollectionCell = collectionView.dequeueReusableCellWithReuseIdentifier("ButtonCell", forIndexPath: indexPath) as! ButtonCollectionCell
cell.cellBackgroundView.backgroundColor = UIColor.darkGrayColor()
}
颜色还是没变...
基本上我希望这些单元格的行为与按钮完全一样。我希望它们在我松开手指后在触摸时突出显示为浅灰色(它们最初是白色)我希望它们变成深灰色。
如果我再次触摸,我希望它们再次突出显示为浅灰色,然后再次变为白色。
如果 didSelectItemAtIndexPath
不是这样做的方法,那是什么?
您可以为 UICollectionView
实现自己的触摸手势识别器。参见
完成后,调用 UICollectionView
实例的 -indexPathForItemAtPoint:
方法,然后在 -cellForItemAtIndexPath:
返回的单元格中进行更改
当你dequeueReusableCellWithReuseIdentifier
它可以return给你一个新的单元格。
改为使用 cellForItemAtIndexPath
获取该索引路径处的当前单元格。
我建议对您的代码进行一些更改,以帮助您解决错误。
首先,我会调用 cellForItemAtIndexPath
方法来获取您的 cell
而不是使用 dequeue
方法:
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! ButtonCollectionCell
然后你应该在didSelectItemAtIndexPath
方法中调用reloadItemsAtIndexPaths
来重新加载单元格:
collectionView.reloadItemsAtIndexPaths([indexPath])
此外,您不应在 didSelectItemAtIndexPath 方法中更改背景,但在检查单元格是否被选中的 cellForItemAtIndexPath
方法中:
if(cell?.selected){
//set your background-color
}else{
//change color
}
把这行代码放在你的方法中:
collectionView.cellForItem(at: indexPath)?.backgroundColor = UIColor.cyan
我在集合视图中有一组单元格,我想让它们像按钮一样工作。
当我点击一个单元格时,我希望该单元格突出显示,然后更改颜色。
我最初可以使用 cellForItemAtIndexPath
方法设置 collectionViewCell 中 view.backgroundColor 的颜色。然而,与我认为这样做会起作用的相反:
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell: ButtonCollectionCell = collectionView.dequeueReusableCellWithReuseIdentifier("ButtonCell", forIndexPath: indexPath) as! ButtonCollectionCell
cell.cellBackgroundView.backgroundColor = UIColor.darkGrayColor()
}
颜色还是没变...
基本上我希望这些单元格的行为与按钮完全一样。我希望它们在我松开手指后在触摸时突出显示为浅灰色(它们最初是白色)我希望它们变成深灰色。
如果我再次触摸,我希望它们再次突出显示为浅灰色,然后再次变为白色。
如果 didSelectItemAtIndexPath
不是这样做的方法,那是什么?
您可以为 UICollectionView
实现自己的触摸手势识别器。参见
完成后,调用 UICollectionView
实例的 -indexPathForItemAtPoint:
方法,然后在 -cellForItemAtIndexPath:
当你dequeueReusableCellWithReuseIdentifier
它可以return给你一个新的单元格。
改为使用 cellForItemAtIndexPath
获取该索引路径处的当前单元格。
我建议对您的代码进行一些更改,以帮助您解决错误。
首先,我会调用 cellForItemAtIndexPath
方法来获取您的 cell
而不是使用 dequeue
方法:
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! ButtonCollectionCell
然后你应该在didSelectItemAtIndexPath
方法中调用reloadItemsAtIndexPaths
来重新加载单元格:
collectionView.reloadItemsAtIndexPaths([indexPath])
此外,您不应在 didSelectItemAtIndexPath 方法中更改背景,但在检查单元格是否被选中的 cellForItemAtIndexPath
方法中:
if(cell?.selected){
//set your background-color
}else{
//change color
}
把这行代码放在你的方法中:
collectionView.cellForItem(at: indexPath)?.backgroundColor = UIColor.cyan