【问题标题】:How to make UICollectionView only select a cell on touchup instead of touch down如何使 UICollectionView 仅在触摸而不是触摸时选择一个单元格
【发布时间】:2018-07-27 21:33:33
【问题描述】:

基本上我拥有的是一个非常简单的 UICollectionViewCell 子类,它通过其 isSelected 属性上的属性观察器更改其背景颜色和其他一些美学特征:

class SelectableCell: UICollectionViewCell {

    override var isSelected: Bool{
        didSet{
            if(isSelected)
            {
                self.backgroundColor = UIColor.white
            }
            else
            {
                self.backgroundColor = UIColor.black
            }
        }
    }
}

这或多或少按预期工作,如果我在我的收藏视图中点击这些单元格之一,背景会相应改变。

问题是,如果我选择一个单元格,然后决定滚动浏览我的集合,该单元格将取消选择,直到我完成滚动然后重新选择

(注意:当我说重新选择时,我并不是说委托功能 像 didSelectItem 被触发 - 只是 isSelected 属性 变回真)

这似乎只有在我在另一个单元格的范围内开始滚动时才会发生。

所以我假设正在发生的是,当我按下它时它会立即取消选择单元格,当它检测到我正在滚动而不是点击它时,它会回滚选择状态并重新选择正确的单元格.

有什么方法可以让它只在修饰时提交,或者在中间期间保持它处于选定状态?

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell


    【解决方案1】:

    当一次只能选择一个单元格时,这是集合视图处理选择的方式。您可能的解决方法之一是使用多项选择。在这种情况下,您必须自己管理取消选择先前选择的单元格。像这样:

    // somewhere in viewDidLoad
    collectionView.allowsMultipleSelection = true
    
    //then in your delegate method
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let selectedIndexPaths = collectionView.indexPathsForSelectedItems else { return }
    
        for selectedIndexPath in selectedIndexPaths where selectedIndexPath != indexPath {
            collectionView.deselectItem(at: selectedIndexPath, animated: true)
        }
    }
    

    【讨论】:

      【解决方案2】:

      如何让 UICollectionView 只在 touchup 时选择一个单元格而不是 着陆

      这是一个快速的解决方案,或者说是一个想法。我还没有尝试过,但我很确定这会奏效:

      1. 为您的单元格添加一个清除按钮,占据单元格的边缘。
      2. 添加一个选择器,其中包含您需要的事件,因此在这种情况下,如果有的话,添加一个touch down
      3. 然后将完成块或协议添加到您的单元格,以将事件发送到您的控制器。

      希望这会有所帮助!

      【讨论】:

      • 嗯,这确实解决了眼前的问题,但它造成了另一个小不便!使用我的单元格中的按钮,collectionview 不会像一致地滚动。如果我快速滑动它会滚动,但如果我将手指放在一个单元格上并停留太久,它将不允许我滚动。我假设正在发生的事情是按钮正在吃掉输入,所以它不是从点击转换到滑动,而是简单地忽略滑动。好消息是,这在实际设备上比在模拟器上要少得多。但我仍然认为可能有更好的方法,没有缺点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2017-02-12
      相关资源
      最近更新 更多