我正在尝试在选择或取消选择UICollectionView的单元格时设置图像的新颜色。每当我没有设置它的图像的色调颜色它,但我不想有它的默认blue
颜色。所以我在做的是:
在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
函数中,我使用代码对我的图像进行了描述:
let borderWidth = itemBorder.frame.width
let borderHeight = itemBorder.frame.height
myImage = UIImageView(frame: CGRect(x: 0, y: 0, width: borderWidth - 1/4 * borderWidth, height: borderHeight - 1/5 * borderHeight))
myImage.image = UIImage(named: myCollection[indexPath.row])?.withRenderingMode(.alwaysTemplate)
myImage.tintColor = UIColor.groupTableViewBackground
myImage.center = CGPoint(x: tmpCell.bounds.width/2, y: tmpCell.bounds.height/2)
myImage.contentMode = .scaleAspectFit
tmpCell.contentView.addSubview(myImage)
在取消选择和取消选择的函数中等等:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let currentCell: UICollectionViewCell?
switch collectionView {
case myCollectionView:
print("clicked")
currentCell = myCollectionView.cellForItem(at: indexPath)!
currentCell?.tintColor = UIColor.white
case colorsCollectionView:
break
default:
break
}
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let currentCell: UICollectionViewCell?
switch collectionView {
case vehiclesCollectionView:
print("deselected")
currentCell = myCollectionView.cellForItem(at: indexPath)!
currentCell?.tintColor = UIColor.groupTableViewBackground
case colorsCollectionView:
break
default:
break
}
}
有人能告诉我什么错了吗? 提前谢谢!
解决方案
解决方案 每当我想要更新颜色的色调时,我指向不在图像上的单元格,所以基本上只需要将其添加到选定或取消选择的方法中:
currentCell = myCollectionView.cellForItem(at: indexPath)!
let image = currentCell?.contentView.subviews[1] as! UIImageView
image.tintColor = UIColor.white
答案 0 :(得分:1)
我发现您正在设置currentCell?.tintColor
,但我想您可能需要设置currentCell?.vehicleImageView.image.tintColor
此外,我发现您的代码有点令人困惑,因为您有vehicleImage
(可能应该命名为vehicleImageView
)和myImage
,这是UIImage
正在添加作为contentView的子视图?我认为只能添加UIView
的子类作为子视图。
我建议您在自定义myImageView
中创建一个名为UICollectionViewCell
的商家,您可以在其中设置image.tintColor
并更改cell.myImageView.tintColor
和didSelect
{1}}
如果您不从故事板添加它们,您仍然可以创建一个didDeselect
的子类,其中包含一个名为UICollectionViewCell
的属性。您可以根据vehicleImageView
中的要求设置此框架和图像。现在,您将拥有一个可以在cellForRow
和didSelect
中didDeselect
引用的属性。
如果您不想创建具有属性的子类,则基本上必须遍历所有子视图并找到图像视图并在其中设置图像cell.vehicleImageView.image.tintColor
。设置tintColor
的tintColor
将不会解决问题。您必须将其设置为UICollectionViewCell
希望有所帮助!