ios - 更改 CollectionView 中选定单元格的颜色取决于条件
问题描述
我需要在 CollectionView 中为不同的条件设置渐变单元格颜色。
条件是在 ViewController 中的 didSelectItemAt 方法中设置的:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if cellNumbers[indexPath.item] == currentNumberGuess {
updateNumberLabel()
}
}
我设法改变了 UICollectionViewCell 中单元格的颜色:
class CollectionViewCell: UICollectionViewCell {
private lazy var gradient: CAGradientLayer = {
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [UIColor.systemGreen.cgColor, UIColor.green.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
gradientLayer.frame = self.bounds
return gradientLayer
}()
override var isSelected: Bool {
didSet {
if self.isSelected {
self.layer.insertSublayer(self.gradient, at: 0)
label.isHidden = true
} else {
self.gradient.removeFromSuperlayer()
}
}
}
@IBOutlet weak var label: UILabel!
}
但我还需要更改所选单元格的颜色取决于 cellNumbers[indexPath.item] == currentNumberGuess 条件。我怎么能这样做?
解决方案
尝试这个:
- 删除您的
override var isSelected
代码。 - 将您的
gradient
定义移动到您的 ViewController 并使其成为一个函数:
private func getGradient(for cell: UICollectionViewCell) -> CAGradientLayer {
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [UIColor.systemGreen.cgColor, UIColor.green.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
gradientLayer.frame = cell.bounds
return gradientLayer
}
- 更改
didSelectItemAt
函数中的颜色,您可以像这样获取单元格的实例:
private var previousGradientLayer: CAGradientLayer?
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if cellNumbers[indexPath.item] == currentNumberGuess {
guard let cell = collectionView.cellForItem(at: indexPath) else { return }
// Clear gradient of the previously selected cell
self.previousGradientLayer?.removeFromSuperlayer()
// Update previousGradientLayer to the new gradient
self.previousGradientLayer = self.getGradient(for: cell)
// Your code
cell.layer.insertSublayer(self.previousGradientLayer!, at: 0)
label.isHidden = true
}
}
推荐阅读
- excel - 使用方程式 excel 完全更改数字时如何解决?
- asp.net-mvc - MVC 查看列表中包含的列表的显示项
- qt - QML/QtQuick2.2 中的可编辑组合框尺寸非常小
- javascript - 自动对 Promise 方法解析执行操作
- xml - 基于标签xml bash中的off属性搜索并返回标签名称
- laravel - 如何使用 Laravel Mix 和 WorkBox?
- python - 如何修复' for i in range (0, random(2,5) + 1):'
- javascript - Javascript - 使用模式验证 Json
- java - 使用 spring 使用嵌入式 HAL 集合读取 hatoas 响应
- python - 在赋值前引用的第 10 行封闭范围中定义的局部变量“计数”