当选中另一个单元格时,取消选择集合视图单元格。

6

我有一个在viewController上的带有图片的单元格,我想让用户选择其中一张图片作为他们的title label。如何使他们只选择一张图片,即如果他们选择另一张图片,我希望取消他们之前选择的图片。

这是我做的:

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            let cell = collectionView.cellForItem(at: indexPath)
            cell?.layer.borderWidth = 5.0
            cell?.layer.borderColor = UIColor.black.cgColor
            collectionView.allowsMultipleSelection = false
        }

但它允许我选择所有单元格而不仅仅是一个单元格,这点我很喜欢。

你应该在 viewDidLoad 中设置 collectionView.allowsMultipleSelection = false,而不是每次选择时都设置。 - Moriya
我已经尝试了,但它仍然允许我选择多个单元格。 - leaner122
1个回答

11

首先,将 collectionView.allowsMultipleSelection = false 移到 viewDidLoad 中。

其次,我认为你不是真正遇到了多选的问题,而是没有在选择单元格时清除其上的效果。你可以在 didDeselect 中清除它们。

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let cell = collectionView.cellForItem(at: indexPath)
        cell?.layer.borderWidth = 5.0
        cell?.layer.borderColor = UIColor.black.cgColor

    }

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
        let cell = collectionView.cellForItem(at: indexPath)
        cell?.layer.borderWidth = 0
        cell?.layer.borderColor = UIColor.white.cgColor

    }

4
不适用于我。DeselectedItem永远不会被调用。 - AnLT
1
只有当所有单元格都在视图中时,此方法才有效。如果您选择一个单元格并滚动屏幕以外并选择其他内容,则现在您有两个似乎被选中的东西。 - NSCoder
@NSCoder 嗨,我也遇到了同样的问题。 - Abdul Momen
在一些尝试和错误之后解决了它。谢谢。 - Abdul Momen
对于那些在选择单元格时滚动后遇到崩溃的人,你需要按照他在评论中提到的做法: 在viewDidLoad中设置collectionView.allowsMultipleSelection = false。 - mehdigriche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接