如何突出显示所选的UICollectionView单元格? (迅速)

时间:2015-06-02 14:17:25

标签: ios swift uicollectionview

我有一个UICollectionView,用户可以选择多个单元格。跟踪选择了哪些单元格有点困难,因此我需要一些方法来点击单元格时突出显示/创建边框。

代码:

func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool {

    addToList.append(objectsArray[indexPath.row])

    return true

}

8 个答案:

答案 0 :(得分:44)

您可以在didSelectItemAtIndexPath覆盖事件上使用边框更改,如下面的代码,并在单元格上指定新设置。

Swift 3.x:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    addToList.append(objectsArray[indexPath.row])
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.layer.borderWidth = 2.0
    cell?.layer.borderColor = UIColor.gray.cgColor
}

答案 1 :(得分:12)

这是我的解决方案,我确信它有效。

我的解决方案包括3个高亮效果,UICollectionCell的{​​{1}},selectedBackgroundView或您自己的cell.contentView.backgroundColor

如何使用?只需继承specialHighlightedArea。如果需要,请在单元格的BaseCollectionViewCellinit委托方法中进行配置。

如果您不需要突出显示效果,只需在shouldHighlightItemAtIndexPath中找到名为“UICollectionViewDelegate”的方法并返回collectionView或只设置false

cell.shouldTintBackgroundWhenSelected = false

答案 2 :(得分:4)

使用

collectionView.reloadItemsAtIndexPaths([indexPath])

重新加载当前单元格,或

collectionView.reloadData()

重新加载shouldSelectItemAtIndexPath

中的所有单元格

然后在cellForItemAtIndexPath中设置边框或背景颜色(如果单元格被标记为已选中)(对于带有最佳indexPaths的已检查单元格,您可能需要一个新数组。

答案 3 :(得分:4)

您可以创建自定义的collcetionViewCell,并覆盖:

class MyCell: UICollectionViewCell {

    override var isHighlighted: Bool {
        didSet {
            if self.isHighlighted {
                print("yes")
                // Your customized animation or add a overlay view
            } else {
                print("no")
                // Your customized animation or remove overlay view
            }
        }
    }
}

这样,您可以创建类似于UITableViewCell上的高亮效果的结果。

没有子类化:

如果您不想创建自己的collectionViewCell。你可以使用委托方法:

func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath)

func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath)

你可以用它做同样的事情。

答案 4 :(得分:2)

SWIFT

将此代码添加到您的UICollectionViewCell子类中:

 override var isSelected: Bool {
    didSet{
        if self.isSelected {
            self.backgroundColor = UIColor(red: 115, green: 190, blue: 170, alpha: 1.0)
        }
        else {
            self.backgroundColor = UIColor(red: 60, green: 63, blue: 73, alpha: 1.0)
        }
    }
}

这将设置单个选定单元格的颜色,并从任何先前选定的单元格中删除选定的颜色。

答案 5 :(得分:1)

尝试使用此代码突出显示集合视图单元格

func collectionView(_ collectionView: UICollectionView, didHighlightItemAt indexPath: IndexPath) {
    if let cell = collectionView.cellForItem(at: indexPath) {
        cell.contentView.backgroundColor = #colorLiteral(red: 1, green: 0.4932718873, blue: 0.4739984274, alpha: 1)
    }
}

func collectionView(_ collectionView: UICollectionView, didUnhighlightItemAt indexPath: IndexPath) {
    if let cell = collectionView.cellForItem(at: indexPath) {
        cell.contentView.backgroundColor = nil
    }
}

答案 6 :(得分:0)

尝试使边框足够厚以覆盖整个单元格

代码:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    addToList.append(objectsArray[indexPath.row])
    let cell = collectionView.cellForItem(at: indexPath)
    cell?.layer.borderWidth = 200.0
    cell?.layer.borderColor = UIColor.init(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.4).cgColor
}

答案 7 :(得分:0)

对于单元格的多个选择,您可以按照以下步骤进行操作:

JSON_SORT_KEYS = False

对于单个选择,可以按如下方式在collectionviewcell类中使用isSelected:

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){

    if let currentCell = collectionView.cellForItem(at: indexPath) as? QuestionnaireCollectionViewCell {

        // Your selection logic, you can change it according to your requirement
       if currentCell.selectedImage.isHidden == true{
           currentCell.selectedImage.isHidden = false

       }
       else{
          currentCell.selectedImage.isHidden = true
       }
    }

    }

}