ios - iOS:允许用户交互,但在滚动时禁用 UICollectionView 中其他单元格的选择
问题描述
我已经使用集合视图实现了一个水平菜单。在我选择了一个单元格并滚动浏览 collectionView 的情况下,我希望在滚动结束之前无法选择其他单元格,同时保持先前选择的单元格的选择状态。只需设置allowsSelection = false
将取消选择先前选择的单元格。我已经实现了以下方法来检测滚动是否完成:
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if collectionView.isScrollEnabled {
isDragging = true
collectionView.isUserInteractionEnabled = false
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !decelerate {
collectionView.isUserInteractionEnabled = true
}
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
collectionView.isUserInteractionEnabled = true
}
但是,设置isUserInteractionEnabled = false
意味着在我快速滑动的情况下,我不能手动过早停止滚动,这是不希望的。我怎样才能做到这一点?谢谢你。任何帮助表示赞赏。
解决方案
解决方案:
您可以在不启用/禁用用户交互的情况下实现此目的。
做
isDragging
一个全局变量。var isDragging: Bool = false
对方法进行以下更改
UIScrollViewDelegate
:func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { self.isDragging = true } func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { if !decelerate { self.isDragging = true } else { self.isDragging = false } } func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { self.isDragging = false }
UICollectionViewDelegate
在'sdidSelectItemAt
方法中添加以下逻辑:func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if !self.isDragging { // Your code related to cell selction here. } }
推荐阅读
- snakemake - 如何从 config.yaml 分配多个路径?
- scala - 2个案例类的匹配值
- angular - 在 primeNg 下拉列表中使用 overlayVisible 属性
- groovy - 在groovy中以修剪格式获取数据库日期
- javascript - 当我调整浏览器大小时,为什么我的 div 会重叠?
- regex - AWS Cognito 密码正则表达式 - 特定于 AWS Cognito
- java - 没有清单文件 Eclipse
- c++ - 如何在 C/C++ 源代码中使用函数 typedef?
- apache-spark - AWS GlueContext 未初始化
- java - 使用 webview 下载 android instagram 视频