当集合视图单元格被选中时,单元格背景视图和该单元格中的其他标签应该改变颜色。下面的代码适用于ios 15以下的操作系统。如果我在下面的代码中将didSet更改为willSet,它在iOS 15下工作,但在iOS 15以下不工作。是否有解决方案可以更改所选自定义单元格的颜色?我还添加了集合视图委托和数据源方法代码。
override var isSelected: Bool{
didSet{
if self.isSelected
{
super.isSelected = true
lblName.textColor = .white
cellBGView.backgroundColor = .themeColor
cellInfoBtn.tintColor = .white
}
else
{
super.isSelected = false
lblName.textColor = .themeColor
cellBGView.backgroundColor = .white
cellInfoBtn.tintColor = .themeColor
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
selectIndex = indexPath.row
let cell = collectionView.cellForItem(at: indexPath) as! CustomCollectionCell
selectedIndexPath = indexPath
selectIndexSec = indexPath.section
collectionView.reloadData()
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCollectionCell", for: indexPath) as! CustomCollectionCell cell.cellInfoBtn.tag = indexPath.row
cell.cellInfoBtn.addTarget(self, action: #selector(infoBtnTapped(_:)), for: .touchUpInside)
if selectIndex == indexPath.row { cell.isSelected=true }
else { cell.isSelected=false }
return cell
}
我尝试了上述代码,我需要找到一个共同的解决方案,为旧版本以及版本以上15。如果已经有一个答案存在,请重定向我到它。
1条答案
按热度按时间fwzugrvs1#
你做了很多额外的工作。
UICollectionView
使用.indexPathsForSelectedItems
跟踪它自己的选择,因此不需要使用selectedIndexPath
和selectIndexSec
进行额外的跟踪。此外,如果要覆盖
isSelected
,则无需调用.reloadData()
。下面是一个完整的示例--我添加了
lblName
和cellBGView
,但没有添加按钮:运行时,它将如下所示:
如果在选择单元格之前轻按“轻按此处”,您将看到:
选择单元格后:
第一次
请注意,当您滚动单元格进出视图时,集合视图将保持“Selected”状态,并且单元格的UI将在
override var isSelected
中更新......无需担心cellForItemAt
或didSelectItemAt
中的任何问题