代码之家  ›  专栏  ›  技术社区  ›  Igor Kulman

设置UITableViewCell选定的背景色,但UIAppearence不起作用

  •  1
  • Igor Kulman  · 技术社区  · 6 年前

    我想更改我所有 UITableViewCell 我已经在使用 UIAppearence 定义其他一些UI元素的基本属性,并且它可以工作。

    但是,设置

    let bgColorView = UIView()
    bgColorView.backgroundColor = #colorLiteral(red: 0.9411764706, green: 0.9411764706, blue: 0.9411764706, alpha: 1)
    UITableViewCell.appearance().selectedBackgroundView = bgColorView
    

    结果出现了一个奇怪的小故障,细胞失去了选择颜色,尽管 UITableViewCell 仍选择s:

    UITableViewCell disappearing selection

    该故障不是由用户界面代码引起的,因为在 UITableViewCell.awakeFromNib 工作正常,所选单元格保持所需的颜色。

    编辑 :所有不同的单元格都会发生这种情况。细胞不会做任何有趣的事情,只是设置标签颜色等 awakeFromNib 还有一些 RxSwift 在模型设置器中绑定以设置各种标签的值。VCs只是通过调用委托方法(使用 modelSelected RxSwift公司 ).

    编辑 :具有 UITableView 是一个 UISplitViewController . “右边”是 UINavigationController 在这里导航 飞行控制器 使用 setViewControllers 敲打电池后会导致奇怪的故障。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Glenn Posadas    6 年前

    因此,经过一些调查,我能够重现你的“小故障”:)我下载了RxSwift,然后尝试了他们的tableView示例。我也使用RxSwift,但我不使用它们的tableView委托/数据源扩展。我还制作了一个自定义的tableViewCell。

    在重写 setSelected 方法 UITableViewCell ,而不调用其super方法,则发生了相同的情况。实际上,即使不使用RxSwift,也会发生这种情况。

    同样,如果不需要对tableView类执行任何操作,请确保在tableView类中 设置选定 ,不要覆盖它。否则,在重写超类方法时,请确保调用super.method(),就像在控制器的 viewDidLoad() .

    override func setSelected(_ selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
    }
    
        2
  •  0
  •   Satish    6 年前

    它应该工作得很好,我在iOS应用程序中试过了。

    尝试对选定的背景使用不同的颜色,它可能与单元格的背景颜色相同

    并验证UITableViewCell#selection属性未设置为none

    enter image description here