从 collectionView 中选择一个项目后,如何取消选择其他项目?

how can you deselect the other item once you have selected an item from the collectionView?

提问人:Mauriho Enrique Escurra Colqui 提问时间:7/20/2022 最后编辑:Mauriho Enrique Escurra Colqui 更新时间:7/20/2022 访问量:658

问:

在 Swift 中。 重新选择第一项时,它效果很好(它已取消选择),但我有一个问题 当使用“collection.allowsMultipleSelection = true”时,当选择第二项或第三项时,它会为我绘制所有内容(我不想要)。有什么解决方案可以取消选择上一个项目,当我选择更改取消选择的项目(上一个)的新项目时?在斯威夫特。

iOS Swift iPhone UIColictionView UIImageView

评论

0赞 Timmy 7/20/2022
那为什么要启用呢?allowsMultipleSelection
0赞 Mauriho Enrique Escurra Colqui 7/20/2022
选择我触摸的元素,但问题是我触摸了另一个元素,而前一个元素是相同的(没有任何变化)
1赞 Timmy 7/20/2022
这是 的行为。禁用它,以便取消选择上一项。allowsMultipleSelection

答:

1赞 DonMag 7/20/2022 #1

听起来你的目标是:

  • 一次只允许选择一个单元格
  • 还允许点击选定的单元格以取消选择它

如果是这样,您可以通过几种不同的方式进行操作。

一 - 设置集合视图并实现:.allowsMultipleSelection = falseshouldSelectItemAt

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
    // get array of already selected index paths
    if let a = collectionView.indexPathsForSelectedItems {
        // if that array contains indexPath, that means
        //  it is already selected, so
        if a.contains(indexPath) {
            // deselect it
            collectionView.deselectItem(at: indexPath, animated: false)
            return false
        }
    }
    // no indexPaths (cells) were selected, so return true
    return true
}

二、设置与实施:.allowsMultipleSelection = truedidSelectItemAt

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    // get array of already selected index paths
    if let a = collectionView.indexPathsForSelectedItems {
        // for each path in selected index paths
        a.forEach { pth in
            // if it is NOT equal to the tapped cell
            if pth != indexPath {
                // deselect it
                collectionView.deselectItem(at: pth, animated: false)
            }
        }
    }
}

评论

0赞 Mauriho Enrique Escurra Colqui 7/20/2022
宏伟。你救了我,朋友。你的解决方案非常好。谢谢@donmag