iOS:允许用户交互但在滚动时禁用UICollectionView中其他单元格的选择

问题描述 投票:1回答:1

我使用集合视图实现了一个水平菜单。在我选择了一个单元格并且滚动了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意味着在我快速滑动的情况下,我不能手动过早地停止滚动,这是不希望的。我怎样才能做到这一点?谢谢。任何帮助表示赞赏。

ios swift user-interface uicollectionview horizontal-scrolling
1个回答
3
投票

解:

您可以在不启用/禁用用户交互的情况下实现此目的。

  1. 使isDragging成为一个全局变量。 var isDragging: Bool = false
  2. 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 }
  3. 将以下逻辑添加到UICollectionViewDelegatedidSelectItemAt方法: func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if !self.isDragging { // Your code related to cell selction here. } }
© www.soinside.com 2019 - 2024. All rights reserved.