在 Swift 中选择行时删除标签背景颜色

Posted

技术标签:

【中文标题】在 Swift 中选择行时删除标签背景颜色【英文标题】:Label Background Colour removed when row selected in Swift 【发布时间】:2016-02-19 21:10:40 【问题描述】:

我的 Swift 应用程序遇到了一个奇怪的问题。我正在尝试使用我创建的自定义单元格创建UITableViewCell

单元格中有一个空标签和一个文本标签。通过将backgroundColor 设置为一些 R、G、B 颜色来简单地为空标签着色。

但是,当我在表格中选择和取消选择行时,标签的背景颜色会消失。这种情况会发生,直到我将单元格滚动出视图并再次回到视图中,它再次向我显示颜色。

这里有一些屏幕截图来说明正在发生的事情:

这是选择颜色之前的样子

这是我选择颜色时的样子 - 它似乎将标签背景颜色更改为透明。它不应该这样做

这是我选择不同颜色时的样子 - 颜色保持透明/白色

当然,我不希望这种情况发生。目的是让标签颜色保持不变。

这是我的 cellForRowAtIndexPath 代码

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ScenesTableCell
    cell.sceneNameLabel.text = scenesArr[indexPath.row].sceneName
    let red = scenesArr[indexPath.row].sceneCol[0]
    let green = scenesArr[indexPath.row].sceneCol[1]
    let blue = scenesArr[indexPath.row].sceneCol[2]
    let brightness = scenesArr[indexPath.row].sceneBrightnessMultiplier
    cell.colourIndicatorLabel.layer.backgroundColor = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(brightness)).CGColor
    cell.colourIndicatorLabel.layer.cornerRadius = 5
    cell.colourIndicatorLabel.layer.borderWidth = 1
    cell.colourIndicatorLabel.layer.borderColor = UIColor(red: 77.0/255.0, green: 146.0/255.0, blue: 203.0/255.0, alpha: 1.0).CGColor

请注意,我也尝试了以下代码行来更改背景颜色,但是发生了同样的事情,但它填充了圆角边框之外:

cell.colourIndicatorLabel.backgroundColor = UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: CGFloat(brightness))

我真的很感谢这里的一些帮助!我知道我不太擅长在 SO 上提问,所以如果您有任何问题,请提问! ;)

【问题讨论】:

可以使用cell.colourIndicatorLabel.backgroundColor,为什么还要使用cell.colourIndicatorLabel.layer.backgroundColor @penatheboss 我已经设置了一个角半径,当我在这个庄园中设置背景颜色时,颜色溢出了角落。无论哪种方式,当我选择行时,我都会遇到同样的透明度问题。如果可以解决透明度问题,我很乐意使用任何一种方法 【参考方案1】:

当一个单元格被选中时,ios 会清除所有单元格子视图的背景颜色。您可以通过覆盖 setSelected 子类上的 setSelected 方法来避免这种情况:

extension ScenesTableCell 
    override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)
        self.colourIndicatorLabel.backgroundColor = .blue // Set with the color you need
    

为了使用圆角和UIView.backgroundColor不溢出,可以在出列单元格时或在单元格子类中设置cell.colourIndicatorLabel.clipsToBounds = true

【讨论】:

以上是关于在 Swift 中选择行时删除标签背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 swift 中选择时,节标题背景颜色会发生变化

在 Swift 中为选定的 UIPickerView 行设置动画背景颜色

编辑特定标签栏项目的背景颜色

Swift - 在 tableView.selectRow 中更改背景颜色

如何在 Kivy 中动态更改标签背景颜色

UICollectionViewCell 标签在背景颜色中相互重叠