使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用

Posted

技术标签:

【中文标题】使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用【英文标题】:Setting UITableViewCell selected background color with UIAppearence not working 【发布时间】:2018-10-18 08:23:45 【问题描述】:

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

但是,设置

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

导致一个奇怪的故障,单元格失去选择颜色,尽管UITableViewCells 仍然被选中:

故障不是由 UI 代码引起的,因为直接在 UITableViewCell.awakeFromNib 中设置选定的颜色可以正常工作,选定的单元格保持所需的颜色。

编辑:所有不同的单元格都会发生这种情况。这些单元格没有做任何有趣的事情,只是在awakeFromNib 中设置标签颜色等内容,并在模型设置器中设置一些RxSwift 绑定以设置各种标签的值。 VC 只是通过调用委托方法(使用 RxSwift 中的 modelSelected)对被选中的单元格做出反应。

编辑:带有UITableView 的VC 是UISplitViewController 的“左侧”。 “右侧”是UINavigationController,在这个UINavigationController 中使用setViewControllers 在点击单元格后导航会导致奇怪的故障。

【问题讨论】:

那么您想要的是,当您在单元格上点击一次时,突出显示将保持在那里?或者如果你点击一个单元格,高亮应该动画更多毫秒?我不太明白你的“奇怪故障”问题。 您必须在单元格初始化之前设置它,因此请尝试在您的应用委托中设置它 @Glenn 的故障是指单元格被取消选择 是分组的还是普通的tableView? @CatalinaT。平原 【参考方案1】:

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

在覆盖UITableViewCellsetSelected 方法后,没有调用它的超级方法,同样的情况发生了。实际上,即使不使用 RxSwift,这也应该发生。

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

override func setSelected(_ selected: Bool, animated: Bool) 
        super.setSelected(selected, animated: animated)

【讨论】:

实际上,我不会在任何单元格中覆盖setSelected 嗯,在这种情况下,您可能想在单元格中分享一些代码,以及如何实现 tableView 委托 RxSwift 扩展。【参考方案2】:

它应该可以正常工作,我已经在 ios 应用程序中尝试过。

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

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

【讨论】:

当整个点保持选定单元格看起来被选中时,为什么我要将选择设置为无。 尝试生成一个新的应用程序来测试它,它会工作得很好。你的代码中一定有一些东西会产生同样的效果。

以上是关于使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 UIAppearence 更改 UIViewController 的直接子视图的背景颜色

更改 UIAppearence 后刷新标签栏

UIAppearence 仅适用于 iOS 中的系统颜色?

分离 UIAppearence 代码

UIBarButtonItem 的默认后退按钮背景图像出现在我的自定义

如何立即设置CustomTableView(CoreData)