UITableViewCell 选择样式更改所有子视图的背景颜色

Posted

技术标签:

【中文标题】UITableViewCell 选择样式更改所有子视图的背景颜色【英文标题】:UITableViewCell selection style changing background color for all subviews 【发布时间】:2017-08-21 16:22:57 【问题描述】:

我正在使用故事板快速写作,并且正在使用 ios 10。

我有一个由一些子视图组成的UITableViewCell(它们是UIViews)。其中一些子视图有背景颜色。

单元格上的选择样式为默认(灰色)。

当我点击单元格时,单元格变为灰色。好的。但是,单元格中每个子视图的背景颜色也会自动更改以匹配单元格的选择颜色(灰色)。不好。

我怎样才能最好地防止这种行为?我不希望单元格中子视图的背景颜色发生变化。

注意:我不认为通过侦听 didSelectRowAtIndexPath 委托方法然后设置单元格内容视图的背景颜色来进行自己的选择不是一个很好的解决方案。也许这是唯一的方法,但我想先看看有没有其他选择。

更新: 澄清一下,我不喜欢上述听取代表的解决方案的另一个原因是它解决了每个单元格的问题。因此,如果我有其他使用相同子视图的自定义单元格,我将不得不实施相同的修复。我想要在视图级别而不是单元级别修复此问题的东西。这样当我在其他自定义单元格中为不同的表格视图使用这些相同的视图时,我就不必担心了。

【问题讨论】:

您是否尝试过在故事板中将子视图的背景颜色设置为透明以外的颜色? @theMikeSwan 他们在故事板中不透明。他们有背景颜色。红色或绿色等。 关于您的最后一次更新:您可以继承 TableViewController 并覆盖那里的委托侦听器。当您的自定义 TableViewControllers 从这个子类化时,您不必复制逻辑 【参考方案1】:

这种方式肯定比听 didSelectRowAtIndexPath 更好。 在您的自定义单元类中使用这些属性:

override var isSelected: Bool 
        didSet 
            if isSelected 
                //play with colors
                print("selected")
             else 
                //play with colors
                print("deselected")
            
        
    

    override var isHighlighted: Bool 
        didSet 
            if isHighlighted 
                //play with colors
                print("highlighted")
             else 
                //play with colors
                print("not highlighted")
            
        
    

禁用选择样式:

cell.selectionStyle = UITableViewCellSelectionStyleNone

还有一个棘手的问题:

cell.selectedBackgroundView = UIView()

【讨论】:

嗯...问题是,无论我使用哪个自定义单元格,我都想完成这项工作。其他自定义单元格我也使用相同的子视图,所以我不想为每个单元格修复这个问题。也许 UIView 上有一个属性可以设置以防止单元格选择样式影响该视图的颜色? 这个:cell.selectionStyle = UITableViewCellSelectionStyleNone; 这是在单元格上,而不是子视图上。我想在子视图级别解决这个问题,这样当我在其他单元格中使用子视图时,我不必担心它。我希望能够设置单元格选择样式,而不影响子视图的颜色。 我更新了我的答案并添加了棘手的方法。我希望这就是你想要的:) 谢谢,但我认为这仍然是在单元级别修复它。所以每个使用我的子视图的自定义单元格都必须这样做。我宁愿在子视图级别以另一种方式修复它。但如果没有其他办法,我认为这是一个可能的选择。

以上是关于UITableViewCell 选择样式更改所有子视图的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

选择时更改 UITableViewCell 的 alpha 啥都不做

更改子视图的所有者?

更改 UITableViewCell 内 UIView 的高度(故事板)

点击单元格后不同的 UITableViewCell 子视图布局

更改 UITableViewCell 样式会导致点击操作不会发生

在普通样式的 UITableView 中更改自定义 UITableViewCell 单元格的背景颜色