iOS:允许用户交互,但在滚动时禁用在UICollectionView中选择其他单元格
我使用集合视图实现了一个水平菜单。在我选择了一个单元格并在collectionView中滚动的情况下,我希望其他单元格在滚动结束之前不可选择,同时保持先前选择的单元格的选择状态。只需设置iOS:允许用户交互,但在滚动时禁用在UICollectionView中选择其他单元格,ios,swift,user-interface,uicollectionview,horizontal-scrolling,Ios,Swift,User Interface,Uicollectionview,Horizontal Scrolling,我使用集合视图实现了一个水平菜单。在我选择了一个单元格并在collectionView中滚动的情况下,我希望其他单元格在滚动结束之前不可选择,同时保持先前选择的单元格的选择状态。只需设置allowssection=false即可取消选择先前选择的单元格。我已经实现了以下方法来检测滚动是否完成: func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { if collectionView.isScrollEnabled {
allowssection=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
意味着我不能在快速滑动的情况下手动提前停止滚动,这是不需要的。我怎样才能做到这一点?非常感谢。感谢您的帮助。解决方案:
您可以在不启用/禁用用户交互的情况下实现这一点
isDraging
成为全局变量
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
的didSelectItemAt
方法:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if !self.isDragging {
// Your code related to cell selction here.
}
}
谢谢,简单明了。我不知道为什么我以前没有想到这一点。我很高兴这有帮助!