使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用
Posted
技术标签:
【中文标题】使用 UIAppearence 设置 UITableViewCell 选择的背景颜色不起作用【英文标题】:Setting UITableViewCell selected background color with UIAppearence not working 【发布时间】:2018-10-18 08:23:45 【问题描述】:我想更改我所有UITableViewCell
s 的选定颜色。我已经在使用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 仍然被选中:
故障不是由 UI 代码引起的,因为直接在 UITableViewCell.awakeFromNib
中设置选定的颜色可以正常工作,选定的单元格保持所需的颜色。
编辑:所有不同的单元格都会发生这种情况。这些单元格没有做任何有趣的事情,只是在awakeFromNib
中设置标签颜色等内容,并在模型设置器中设置一些RxSwift
绑定以设置各种标签的值。 VC 只是通过调用委托方法(使用 RxSwift
中的 modelSelected
)对被选中的单元格做出反应。
编辑:带有UITableView
的VC 是UISplitViewController
的“左侧”。 “右侧”是UINavigationController
,在这个UINavigationController
中使用setViewControllers
在点击单元格后导航会导致奇怪的故障。
【问题讨论】:
那么您想要的是,当您在单元格上点击一次时,突出显示将保持在那里?或者如果你点击一个单元格,高亮应该动画更多毫秒?我不太明白你的“奇怪故障”问题。 您必须在单元格初始化之前设置它,因此请尝试在您的应用委托中设置它 @Glenn 的故障是指单元格被取消选择 是分组的还是普通的tableView? @CatalinaT。平原 【参考方案1】:所以经过一些调查,我能够重现您的“故障”:) 我下载了 RxSwift,然后尝试了他们的 tableView 示例。我也使用 RxSwift,但我不使用他们的 tableView 委托/数据源扩展。我还做了一个自定义的 tableViewCell。
在覆盖UITableViewCell
的setSelected
方法后,没有调用它的超级方法,同样的情况发生了。实际上,即使不使用 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 的直接子视图的背景颜色