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

时间:2016-02-19 21:10:41

标签: ios uitableview colors custom-cell

我的Swift应用程序遇到了一个奇怪的问题。我尝试使用我创建的自定义单元格创建# 1 % (x+2 or x+1) returns 1 for 0 or positive, non-1 for negative # Use x+2 or x+1 to avoid ZeroDivisionError for x == 0 >>> print([x for x in li if 1 == 1 % (x+2 or x+1)]) [2, 5, 0, 389, 202, 8] # We can even avoid using == by substituting subtraction since the result # is a fixed 1 for non-negative, though it's pretty ugly looking >>> print([x for x in li if not 1 % (x+2 or x+1) - 1]) [2, 5, 0, 389, 202, 8] # Or if 0 shouldn't be included in results, tweak the divisor differently: >>> print([x for x in li if 1 == 1 % (x+1 or x)]) [2, 5, 389, 202, 8]

我在单元格中有一个空标签和一个文本标签。通过将UITableViewCell设置为某些R,G,B颜色,可以简单地对空标签进行着色。

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

这里有一些屏幕截图来说明发生了什么:

这是选择颜色之前的样子 Before Selecting a Color

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

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

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

这是我backgroundColor

的代码
cellForRowAtIndexPath

请注意,我已尝试使用以下代码行来更改backgroundColor,但是同样的事情会发生,但它会填充圆形边框之外:

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
}

我非常感谢这里的一些帮助!我知道我不太擅长提问,所以如果您有任何疑问,请询问! ;)

1 个答案:

答案 0 :(得分:2)

iOS会在选择单元格时清除所有单元格子视图的背景颜色。您可以通过覆盖setSelected子类上的UITableViewCell方法来避免这种情况:

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