isHighlighted 和 isSelected didSet 只调用 UICollectionViewCell 而不是 UITableViewCell

jeh*_*jeh 7 uitableview ios uicollectionviewcell swift

我想在突出显示/选择时对自定义表格视图单元格应用一些样式更改,以便覆盖isHighlightedisSelected实现这一点。它适用于我的自定义集合视图单元格,但不适用于我点击自定义表格视图单元格。

我为表格视图和集合视图设置了完全相同的场景,并在自定义单元格上实现了以下内容:

override var isHighlighted: Bool {
   didSet {
     //called when I tap for CustomCollectionViewCell not for CustomTableViewCell
   }
}

override var isSelected: Bool {
  didSet {
     //called when I tap for CustomCollectionViewCell not for CustomTableViewCell
  }
}
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?为什么在点击表视图单元格时没有调用它?无论自定义单元格的内容如何,​​我尝试使用的任何表格视图都会发生这种情况。

Max*_*tov 16

另一个答案对我不起作用。我认为原因是UITableViewCell.isSelected当包含UITableView句柄选择时从未调用 setter ,func setSelected(_ selected: Bool, animated: Bool)而是通过该状态传递。这意味着在您的UITableViewCell子类中覆盖此函数而不是 setter 可以工作:

override func setSelected(_ selected: Bool, animated: Bool) {
  // implementation that was meant to be in `isSelected` `didSet`
}
Run Code Online (Sandbox Code Playgroud)


小智 0

通过这种方式覆盖这些属性,您将不再使用它们的默认实现。

尝试将信息转发至super

override var isHighlighted: Bool {
    get {
        return super.isHighlighted
    }
    set {
        //do something
        super.isHighlighted = newValue
    }

override var isSelected: Bool {
    get {
        return super.isSelected
    }
    set {
        //do something
        super.isSelected = newValue
    }
}
Run Code Online (Sandbox Code Playgroud)