带图像的 UICollectionView 单元格,单击 Swift 更改背景

UICollectionView Cell with Image, change Background with click in Swift

我有一个 Collection 视图,如下所示:

蓝色边框是一张图片。当我按下它们时,我希望文本和图像短暂变暗。

我发现这个类似的 SO 问题:

它在 Objective-C 中包含 this answer:

If you have a CustomCell, you must have a CustomCell.m (implementation file). In this file add this, to me is the easy way:

-(void)setHighlighted:(BOOL)highlighted
{
    if (highlighted)
    {
        self.layer.opacity = 0.6;
        // Here what do you want.
    }
    else{
        self.layer.opacity = 1.0;
        // Here all change need go back
    }
}

我尝试将其添加到我的自定义 UICollectionViewCell 中,如下所示:

import UIKit

class DoubleSoundsCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var cellLabel: UILabel!

    func highlighted(highlighted: Bool) {
        if (highlighted)
        {
            self.layer.opacity = 0.6;
            // Here what do you want.
        }
        else{
            self.layer.opacity = 1.0;
            // Here all change need go back
        }
    }
}

但是当我点击一个单元格时,我的 collection 视图没有明显的效果。是我加错地方了还是我把它转换成Swift的方式不对?

如果我调用方法 setHighlighed,则会收到错误

[PATH]/DoubleSoundsCollectionViewCell.swift:15:10: Method 'setHighlighted' with Objective-C selector 'setHighlighted:' conflicts with setter for 'highlighted' from superclass 'UICollectionViewCell' with the same Objective-C selector

因为highlighted是Swift中的一个属性。

参见 Swift 中的 UICollectionViewCell 声明。

public var highlighted: Bool

因此您需要像这样覆盖 属性。

class DoubleSoundsCollectionViewCell : UICollectionViewCell {

    override var highlighted: Bool {
        didSet {
            // add your implementation here
        }
    }
}

你应该总是知道 Swift。如果要覆盖某些内容,则必须包含 override 关键字,如果编译器在没有覆盖的情况下接受它,那么你做错了。