Ios 如何使UICollectionView仅在触地而非触地时选择单元格
本质上,我有一个非常简单的UICollectionViewCell子类,它通过属性观察者在其isSelected属性上更改其背景颜色和一些其他美学特征:Ios 如何使UICollectionView仅在触地而非触地时选择单元格,ios,swift,uicollectionview,uicollectionviewcell,Ios,Swift,Uicollectionview,Uicollectionviewcell,本质上,我有一个非常简单的UICollectionViewCell子类,它通过属性观察者在其isSelected属性上更改其背景颜色和一些其他美学特征: class SelectableCell: UICollectionViewCell { override var isSelected: Bool{ didSet{ if(isSelected) { self.backgroundColo
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的滚动就不那么一致了。如果我快速滑动,它会滚动,但如果我把手指放在手机上,停留太久,它就不允许我滚动。我假设发生的情况是按钮正在吞噬输入,因此它不会从点击转换为滑动,而是忽略滑动。好消息是,与模拟器相比,在实际设备上,这一点要少得多。但我仍然认为可能有一个没有缺点的更好的方法。