首页 > 解决方案 > UICollectionViewController + diffableDataSource - 当您的手指仍在其上时,单元格不会突出显示

问题描述

如果我正在使用UICollectionViewControllerdiffableDataSource点击单元格 - 它会突出显示,但当我仍然握住它时会变得不突出。如果UIViewController + collectionViewdiffableDataSource- 一起使用,那么一切都按预期工作,并且单元格保持突出显示,直到我从中释放手指。如果UICollectionViewController与标准一起使用,则相同dataSource-一切正常。有没有人也注意到这个问题?任何建议或想法将不胜感激,也许我只是错过了一些东西,但现在感觉更像是苹果方面的错误

您可以在此处查看示例: https ://github.com/ashishbl86/MockAppStore/blob/0ea8e74a4823c8c80bd7e8d5c6a9514958fbe459/MockAppStore/CollectionViewController.swift

只需将这些方法添加到 CollectionViewController.swift 文件中:

override func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
        print("cell highlighted")
    }
    
    override func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
        print("cell unhighlighted")
    } 

当您的手指仍在单元格上时,您会看到打印了“未突出显示的单元格”

标签: iosswiftuicollectionviewlong-pressdiffabledatasource

解决方案


好吧,事实证明我们需要设置

installsStandardGestureForInteractiveMovement = false

此变量安装一个标准手势识别器UICollectionViewController以驱动重新排序过程。它true默认设置为,但为了使事情正常工作,collectionViewdataSource必须通过实现适当的方法来声明它对重新排序项目的支持。在旧的好dataSource方法moveItemAt被标记为可选,而在diffableDataSource它不再被声明为可选,这就是这个变量导致上述问题中描述的行为的原因。有关此变量的更多信息,请参阅文档: https ://developer.apple.com/documentation/uikit/uicollectionviewcontroller/1623979-installsstandardgestureforintera


推荐阅读