表格视图单元格背景没有完全改变

时间:2018-08-23 14:03:24

标签: ios swift xcode

请参见Screenshot

我正在尝试将所选单元格的背景颜色更改为白色。但是我看到有些区域仍然是灰色的。 如何避免这种情况?

self.tableView.selectRow(at: defaultLangIndexPath, animated: true, scrollPosition: .bottom)
    let selectedCell:UITableViewCell = tableView.cellForRow(at: defaultLangIndexPath)!
    selectedCell.contentView.backgroundColor = UIColor.white
    selectedCell.accessoryView?.backgroundColor = UIColor.white

我无法取消选择单元格,因为我想要突出显示的附件图像并希望其按预期工作。

2 个答案:

答案 0 :(得分:1)

为解决这个问题,UITableViewCell具有一个名为selectedBackgroundView的属性,该属性在初始化时为nil

因此,您可以使用简单的UIView()对其进行初始化,并在tableViewCell的selectedBackgroundView方法中设置setSelected:的背景颜色。

class SelectionCell: UITableViewCell {
  func awakeFromNib() { 
    ...
    self.selectedBackgroundView = UIView()
    // this view can be initialised in awakeFromNib 
       or UITableViewCell's initialiser methods.
    ...
  }

  override func setSelected(_ selected: Bool, animated: Bool) {

    super.setSelected(selected, animated: animated)
    self.selectedBackgroundView?.backgroundColor = selected : .white : .clear
    ...
  }
}

答案 1 :(得分:0)

快捷键4

A:通过在情节提要中设置

转到情节提要,选择单元格,转到属性检查器(位于右上角),选择后,将其设置为“无”

enter image description here

B:按单元子类

请确保在Storyboard Identity Inspector上或以编程方式设置此自定义单元格类型。

class WhiteBackgroundCell: UITableViewCell {

    override func awakeFromNib() {
        super.awakeFromNib()
        selectionStyle = .none
        //or for custom color
        //let background View = UIView()
        //backgroundView.backgroundColor = .white
        //selectedBackgroundView = backgroundView

        //other cell setting
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        //do something
    }
}

C:通过TableViewDelegate

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    guard let cell = tableView.cellForRow(at: indexPath)else{return}
    cell.backgroundColor = UIColor.white
}

选项 A和B都很好。选项 C不是一个好习惯,但不确定您要实现的目标。由于该委托旨在执行一些逻辑/触发,而不是设置单元格背景。另外,您需要将背景颜色更改为正常状态并取消选择。