尝试覆盖 UICollectionViewCell Swift 中的 "selected" 以获得自定义选择状态

Trying to override "selected" in UICollectionViewCell Swift for custom selection state

我正在尝试为 UICollectionView 中的单元格实现自定义 selection 样式。尽管可以很容易地在 didSelect 和 didDeSelect 方法中手动执行此操作,但我想通过操作 UICollectionViewCell 中的 "selected" 变量来实现此目的。

我有这个代码:

    override var selected: Bool {
    get {
        return super.selected
    }
    set {
        if newValue {
            self.imageView.alpha = 0.5
            println("selected")
        } else if newValue == false {
            self.imageView.alpha = 1.0
            println("deselected")
        }
    }
}

现在,当我 select 一个单元格时,该单元格被突出显示,但 "selected" 被打印两次并且 deselection 不起作用(即使实现了两个 UICollectionView 方法).

我该怎么做?谢谢!

通过单步执行代码解决了这个问题。问题是 super.selected 没有被修改。所以我将代码更改为:

override var selected: Bool {
    get {
        return super.selected
    }
    set {
        if newValue {
            super.selected = true
            self.imageView.alpha = 0.5
            println("selected")
        } else if newValue == false {
            super.selected = false
            self.imageView.alpha = 1.0
            println("deselected")
        }
    }
}

现在可以了。

试试这个。

override var selected: Bool {
    didSet {
        self.alpha = self.selected ? 0.5 : 1.0
    }
}

对于 Swift 3.0:

override var isSelected: Bool {
    didSet {
        alpha = isSelected ? 0.5 : 1.0
    }
}

对于Swift 5,将此代码放入单元格

override var isSelected: Bool {
    get {
        return super.isSelected
    }
    set {
        if newValue {
            super.isSelected = true
            self.lbl_Sub_Category.textColor = UIColor.white
            self.ly_Container.backgroundColor = UIColor.black
            print("selected")
        } else if newValue == false {
            super.isSelected = false
            self.lbl_Sub_Category.textColor = UIColor.black
            self.ly_Container.backgroundColor = UIColor.white
            print("deselected")
        }
    }
}

您可以在 viewcontroller:

中使用此代码 select 集合视图的第一项
    grid_SubCategories.reloadData()
    
    let firstItem:IndexPath = IndexPath(row: 0, section: 0)
    grid_SubCategories.selectItem(at: firstItem, animated: false, scrollPosition: .left)