【问题标题】:iOS: Allow user interaction but disable selection of other cells in UICollectionView when scrollingiOS:允许用户交互,但在滚动时禁用 UICollectionView 中其他单元格的选择
【发布时间】:2019-07-23 22:22:16
【问题描述】:

我已经使用集合视图实现了一个水平菜单。在我选择了一个单元格并滚动浏览 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】:

    解决方案:

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

    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.
           }
      }
      

    【讨论】:

    • 谢谢,简单明了。不知道为什么我以前没有想到这一点。
    • 我很高兴它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 2016-11-20
    • 1970-01-01
    • 2016-07-26
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多