试图在 UICollectionViewCell Swift 中覆盖“selected”以实现自定义选择状态

Posted

技术标签:

【中文标题】试图在 UICollectionViewCell Swift 中覆盖“selected”以实现自定义选择状态【英文标题】:Trying to override "selected" in UICollectionViewCell Swift for custom selection state 【发布时间】:2015-07-09 23:21:24 【问题描述】:

我正在尝试为 UICollectionView 中的单元格实现自定义选择样式。尽管可以很容易地在 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")
        
    

现在,当我选择一个单元格时,该单元格会突出显示,但“选定”会打印两次,并且取消选择不起作用(即使实现了两个 UICollectionView 方法)。

我该怎么做呢?谢谢!

【问题讨论】:

您是否尝试过设置断点并在第一个“选定”被击中时进行跟踪? 谢谢。帮我解决了问题。 super.selected 未被修改 【参考方案1】:

对于 Swift 3.0:

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

【讨论】:

应该选择这个作为答案,因为它对应于最新版本的ios并且仅使用didSet 滚动时为什么会调用isSelected?【参考方案2】:

通过单步执行代码来解决这个问题。问题是 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")
        
    

现在它正在工作。

【讨论】:

很高兴它的工作!您应该能够很快将您的答案标记为正确 太棒了..!!帮助(Y)并为回答自己的问题竖起大拇指 可能会为 Swift 3 添加更新。selected 不是“isSelected”【参考方案3】:

试试这个。

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

【讨论】:

以上是关于试图在 UICollectionViewCell Swift 中覆盖“selected”以实现自定义选择状态的主要内容,如果未能解决你的问题,请参考以下文章

隐藏 UICollectionViewCell

在UICollectionViewCell中不调整文本大小

UICollectionViewCell 中的标签文本未更新

如何创建自定义 UICollectionViewCell

UICollectionViewCell 带有约束的动画

NSLAyoutConstraints 未应用于 UICollectionViewCell 中的 UIView