如何设置表格视图编辑附件的背景颜色?

时间:2016-05-09 08:15:05

标签: ios swift uitableview colors

我的应用程序的主题颜色是浅绿色,所以一切都必须是绿色的,就像这个表视图单元格一样:

enter image description here

问题在于,当我点击“编辑”按钮时,单元格左侧会弹出一个小的减号,并且不是绿色的:

enter image description here

我不明白为什么会这样。这是我在cellForRowAtIndexPath

中的代码
let cell = UITableViewCell()
cell.textLabel?.text = someStuff
cell.textLabel?.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)
cell.contentView.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)

// Look! here I set the color of the editing accessory!
cell.editingAccessoryView?.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)
return cell

正如您所看到的,我已将所有内容设置为绿色,包括文本标签,背景,甚至是editingAccessoryView!但那件事并不是绿色的!如上所示,它保持白色。

我还有别的东西可以让它成为绿色吗?

5 个答案:

答案 0 :(得分:5)

您必须使用tableView:willDisplayCell:forRowAtIndexPath:方法执行此操作。你可以这样:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell()
    cell.textLabel?.text = "MyText"
    return cell
}

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)
}

修改

以下代码的可视化结果如下: enter image description here

答案 1 :(得分:3)

可以像这样修改editingAccessoryView背景颜色:

cell.contentView.superview.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)

如果contentView.superview背景颜色的更改不起作用,您可以尝试:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
     cell.backgroundColor = UIColor(red: 0xca / 0xff, green: 1, blue: 0xc7 / 0xff, alpha: 1)
}

答案 2 :(得分:1)

这是我更新 Swift 2.2

按钮的方法
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?
    {
        let deleteBtn = UITableViewRowAction(style: .Default, title: "Delete", handler: { (action, indexPath) in
            print("Delete pressed!")
        })
        deleteBtn.backgroundColor = UIColor.blueColor()//Change color here
        let editBtn = UITableViewRowAction(style: .Default, title: "Edit", handler: { (action, indexPath) in
            print("Edit pressed!")
        })
        editBtn.backgroundColor = UIColor.redColor()//change color here
        return [deleteBtn, editBtn]
    }

    override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return true
    }
    override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    }

答案 3 :(得分:0)

不知道为什么苹果不会将这些东西置于默认状态。这是改变整个UITableViewCell背景颜色的代码:

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cellView = tableView.dequeueReusableCell(withIdentifier: cellReuseId, for: indexPath)
    //Setup selectedbackgroundView which change color includes editingAccessoy background  color
    let selectedBackground = UIView()
    selectedBackground.frame = cellView.frame
    selectedBackground.backgroundColor = SCColor.selectedColor
    cellView.selectedBackgroundView = selectedBackground
    //Setup backgroundView which change color includes asscessory background color
    let cellBackground = UIView()
    cellBackground.frame = cellView.frame
    cellBackground.backgroundColor = cellData.isSelected ? SCColor.selectedColor : UIColor.white
    cellView.backgroundView = cellBackground
}

答案 4 :(得分:0)

此函数的方法签名在后续版本的swift中略有改变。

在Swift 4+中使用

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        cell.backgroundColor = UIColor.red // Your color here!
}