选择单元格时,按钮的背景颜色会改变然后恢复

Posted

技术标签:

【中文标题】选择单元格时,按钮的背景颜色会改变然后恢复【英文标题】:When cell is selected, the backgound color of the button will change and then recorver 【发布时间】:2015-09-30 07:50:31 【问题描述】:

我有一个自定义 UITableViewCell 并且其中有一个按钮,当我将按钮的背景颜色设置为Default Color(即[UIColor whiteColor])以外的某种颜色时,然后当单元格被选中,当单元格的选择高亮消失时,按钮的背景颜色会改变并恢复。

如何在选择单元格时保持按钮的背景颜色?

【问题讨论】:

您能在界面生成器中查看 UITableViewCell 的 UITableViewCellSelectionStyle 属性吗?如果您不想在选择时进行任何更改,则应将其设置为 UITableViewCellSelectionStyleNone。 AFAICS,问题是 PO 希望改变单元格的背景,而子视图应该保持不变。 【参考方案1】:

我会建议您检查您的表格视图单元格的视图层次结构。它可以很容易地完成:在模拟器上运行您的应用程序 -> 单击“Debug View Hierarchy”(参见所附的第 1 张图片) -> 使用检查器(参见所附的第 2 张图片)。

更新:经过一段时间的挖掘,我得到了以下信息(请参阅下面的 3 个屏幕截图来说明情况):

如您所见,有一个内部调用会清除名为 _setOpaque:forSubview: 的单元格子视图的背景颜色

话虽如此,如果您想确保按钮的背景颜色保持不变,您应该通过以下方式实现单元格的选择机制:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 
    [super setSelected:selected animated:animated];

    // here comes your custom color (it's assumed that myButton is a binded IBOutlet
    self.myButton.backgroundColor = [UIColor greenColor]; // or whatever else

这是一种不友好的 UIKit。希望这会对你有所帮助。

【讨论】:

照你说的做,发现按钮的背景色完全消失了 正确,这并不能单独解决问题,但可能会透露一些意想不到的事情。你的按钮的超级视图(绝对应该是 UITableViewCell 的子视图之一)是什么? 概述:单元格 \ |- ContentView \ |- 按钮 |- 。 .单元格来自xib,单元格只有一个名为contentview的子视图,我的按钮在contentview中,如上所示。 这很正常。好的,你是如何设置按钮的背景颜色的?如果您在其中创建单元格和按钮并将 2 号放在 1 号上共享确切的代码,我可以为您提供帮助。 我在github.com/zeroleaf/ios-DEMO/tree/master/puzzles/CellButtonTest 为这个问题创建了一个简单的项目。你可以试试:)【参考方案2】:

我不知道你所说的恢复是什么意思。但是您想在使用- (void)layoutSubviews 将按钮添加到单元格时添加目标操作。在这种情况下,self 将是自定义表格视图单元格。您希望此代码位于自定义 tableViewCell 类文件的 .m 中。

          - (void) layoutSubviews 
              [self.button addTarget:self forAction:@selector(buttonPressedDown) forControlEvents:UIControlEventTouchedUpInside]
          

    //Cell goes to this method once button has been pressed.
         - (void) buttonPressedDown
              self.backgroundColor = [UIColor redColor];//Replace withwhatever color you want.
         

然后,您可以使用if([self.backgroundColor isEqualTo:[UIColor redColor]]) 之类的条件来编辑 buttonPressedDown,以了解如果背景颜色已经更改,如何处理按钮按下。希望这有助于提供更多关于当单元格突出显示消失时恢复的含义的信息。不知道你的意思。

【讨论】:

对于恢复的模棱两可的描述,我深表歉意。更详细地说,假设单元格中的按钮具有 green 背景颜色,当我们选择一个单元格时,该单元格具有突出显示颜色,默认为浅灰色。而当这个高亮颜色出现时,按钮的背景绿色会消失,当单元格高亮消失时,按钮的背景绿色又会恢复。非常感谢。

以上是关于选择单元格时,按钮的背景颜色会改变然后恢复的主要内容,如果未能解决你的问题,请参考以下文章

选择单元格时,如何阻止 UIView 的背景颜色消失?

excel如何设置背景颜色

excel按背景颜色显示数据多少

选择单元格时,更改 QTableView 中图标的颜色突出显示

iOS UIButton(按钮)点击改变背景色和标题颜色的简单实现

选中时更改 UICollectionView 单元格的背景和标签颜色