我有一个UICollectionView
,其中有五个自定义单元需要在特定条件下渲染,生成单元格。现在我遇到的问题是考虑我在特定索引处选择了一个单元格,现在我向下滚动,现在我再次滚动。当UICollectionView
停止滚动时,如果索引与我们选择的索引相同,则UICollectionView
不会将该单元格显示为已选中。但是现在如果我甚至尝试移动单元格,甚至一点点,UICollectionView
将单元格显示为选定的单元格。
以下是我在 prefetchItem :
(cell as? PATemplateTypeOneCollectionCell)?.fillCellData(row: indexPath.row,section:indexPath.section, paCategoryQuestions: currentIndexQuestion, paQuestionCollection: currentIndexCollection)
cell!.alpha = 0.4
if self.multipleIndexPathsArray[indexPath.section][0] != []{
collectionView.selectItem(at: self.multipleIndexPathsArray[indexPath.section][0], animated: true, scrollPosition: .right)
}
else{
print("self.multipleIndexPathsArray[indexPath.section][0] is empty")
}
UICollectionViewCell:
override var isSelected: Bool {
didSet {
if isSelected {
self.alpha = 1.0
self.layer.borderWidth = 2.0
self.layer.borderColor = ColorConstants.colorFromHexString(hexString: paCategoryQuestions.selection_color).cgColor
}else {
self.alpha = 0.4
self.layer.borderWidth = 1.0
self.layer.borderColor = UIColor.lightGray.cgColor
}
}
请你们帮忙解决这个问题。
答案 0 :(得分:0)
经过数小时的思考后,我遇到了一个解决方案。因此,在长滚动后我的cellForItem没有呈现选中的正确滚动,我尝试的是识别scrollViewDidEndDecelerating
的委托fileprivate func checkIfCellIsSelected(){
for eachCell in afterPaymentPACollectionView.visibleCells{
let indexPath = afterPaymentPACollectionView.indexPath(for: eachCell)
for eachIndexSelected in multipleIndexPathsArray{
if eachIndexSelected.contains(indexPath!){
afterPaymentPACollectionView.selectItem(at: indexPath, animated: true, scrollPosition: .right)
}
}
}
}
//MARK: UIScrollViewDelegate
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
checkIfCellIsSelected()
}
。并通过使用我保存的值数组识别先前是否选择了当前可见的indexPath单元格。以下代码对我有用:
mpmath