Ios 如何使UICollectionView仅在触地而非触地时选择单元格

Ios 如何使UICollectionView仅在触地而非触地时选择单元格,ios,swift,uicollectionview,uicollectionviewcell,Ios,Swift,Uicollectionview,Uicollectionviewcell,本质上,我有一个非常简单的UICollectionViewCell子类,它通过属性观察者在其isSelected属性上更改其背景颜色和一些其他美学特征: class SelectableCell: UICollectionViewCell { override var isSelected: Bool{ didSet{ if(isSelected) { self.backgroundColo

本质上,我有一个非常简单的UICollectionViewCell子类,它通过属性观察者在其isSelected属性上更改其背景颜色和一些其他美学特征:

class SelectableCell: UICollectionViewCell {

    override var isSelected: Bool{
        didSet{
            if(isSelected)
            {
                self.backgroundColor = UIColor.white
            }
            else
            {
                self.backgroundColor = UIColor.black
            }
        }
    }
}
这或多或少是按照预期工作的,如果我在集合视图中点击其中一个单元格,背景会相应地改变

问题是,如果我选择一个单元格,然后决定滚动我的集合,该单元格将取消选择,直到我完成滚动,然后重新选择

(注意:当我说“重新选择”时,我并不是说代理可以正常工作 与didSelectItem一样,它也会被触发-只是isSelected属性 更改返回到true)

只有在另一个单元格的范围内启动滚动条时,才会出现这种情况

所以我假设它会在我按下时立即取消选择单元格,当它检测到我正在滚动而不是点击时,它会将选择状态回滚并重新选择正确的单元格

是否有某种方法可以让它只在润色时提交,或者在中间阶段将其保持在选定状态

如何使UICollectionView仅在修补时选择单元格,而不是 着陆

这里有一个快速的解决方案,或者更确切地说是一个想法。我还没有尝试过,但我很确定这会奏效:

  • 在单元格中添加一个清除按钮,占据单元格的边缘
  • 添加一个选择器,其中包含您需要的事件,因此在本例中,如果有
    ,请单击
  • 然后将完成块或协议添加到单元格中,以将事件发送到控制器

  • 希望这有帮助

    这是集合视图在一次只能选择一个单元格时处理选择的方式。一个可能的解决方法是使用多重选择。在这种情况下,您必须自己管理先前选定单元格的取消选择。像这样:

    // somewhere in viewDidLoad
    collectionView.allowsMultipleSelection = true
    
    //then in your delegate method
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let selectedIndexPaths = collectionView.indexPathsForSelectedItems else { return }
    
        for selectedIndexPath in selectedIndexPaths where selectedIndexPath != indexPath {
            collectionView.deselectItem(at: selectedIndexPath, animated: true)
        }
    }
    

    嗯,这确实解决了眼前的问题,但也带来了另一个小小的不便!在我的手机中有了这个按钮,collectionview的滚动就不那么一致了。如果我快速滑动,它会滚动,但如果我把手指放在手机上,停留太久,它就不允许我滚动。我假设发生的情况是按钮正在吞噬输入,因此它不会从点击转换为滑动,而是忽略滑动。好消息是,与模拟器相比,在实际设备上,这一点要少得多。但我仍然认为可能有一个没有缺点的更好的方法。