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

时间:2019-03-01 20:56:10

标签: ios swift user-interface uicollectionview horizontal-scrolling

我已经使用集合视图实现了水平菜单。在我已选择一个单元格并在collectionView中滚动的情况下,我希望在滚动结束之前其他单元格无法选择,同时保持先前选择的单元格的选择状态。只需设置find . -size -2100c -type f -exec mv {} new_directory/ \; ,即可取消选择先前选择的单元格。我已经实现了以下方法来检测滚动是否完成:

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 } 意味着在我快速滑动的情况下,无法手动过早停止滚动,这是不希望的。我该如何实现?谢谢。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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. UICollectionViewDelegate的{​​{1}}方法中添加以下逻辑:

    didSelectItemAt