如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

Posted

技术标签:

【中文标题】如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?【英文标题】:How do I change the background color of a button within a custom UITableViewCell programatically in Swift? 【发布时间】:2016-08-09 02:24:57 【问题描述】:

我有一个自定义的UITableViewCell,它的一个子视图是button(标题为“RSVP”):

连接到如下代码:

class SelectedEventsTableViewCell: UITableViewCell 

    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var dateLabel: UILabel!
    @IBOutlet weak var descriptionLabel: UILabel!
    @IBOutlet weak var attendanceLabel: UILabel!
    @IBOutlet weak var attendanceButton: UIButton!
 

我正在尝试通过将此代码添加到SelectedEventsTableViewCell 类来更改按钮的背景颜色

override func awakeFromNib() 
    super.awakeFromNib()

    attendanceButton.backgroundColor = UIColor.greenColor()

但是,它不起作用。按钮获得白色背景

有人知道为什么会这样吗?当我按下按钮时以编程方式设置 按钮的背景颜色,它也不起作用。

感谢您的帮助。

【问题讨论】:

只是好奇,故事板中按钮的颜色是什么,另外,你确定你没有在 cellforrowatindexpath 中操作按钮的任何方面吗? @Happiehappie 按钮的颜色是 Clear,我在 cellForRowAtIndexPath 中有以下行:cell.attendanceButton.backgroundColor = event.buttonStatus == Attendance.RSVP.rawValue ? greenColor : redColor 【参考方案1】:

检查您将按钮背景颜色设置为白色的地方。

attendanceButton.backgroundColor = UIColor.whiteColor()

检查您在 TableView 的数据源中使用 SelectedEventsTableViewCell 的对象或在 viewController 中的委托方法的位置。

例如

cell.attendanceButton.backgroundColor = UIColor.whiteColor()

【讨论】:

感谢您的回复@Girish Chovatiya。我检查了我的代码,并且在任何时候都没有将按钮的背景颜色设置为白色。【参考方案2】:

有几个可能的原因。 1.你让那个插座可以访问吗?如果没有,请从情节提要中按 CTRL-DRAG。 2.awakeFromNib()之后你改了吗?或许你在cellForIndexPath(表格视图数据源)里再设置一次。 3.Cell被重复使用但唤醒了一次。这意味着您应该在重用后恢复其状态。 prepareForReuse() 就是为此而设计的。

【讨论】:

感谢您的回复@Lumialxk。我的cellForRowAtIndexPath 方法中确实有一些代码改变了按钮的颜色。我删除了它,按钮现在具有我在awakeFromNib 中设置的正确初始颜色。但是,当我尝试在按下按钮时更改颜色时,它又变白了。【参考方案3】:

我知道这个问题很老,但我在 ios 15 上遇到了同样的问题。解决方案是使用新的 UIButton.Configuration 结构。

if #available(iOS 15.0, *) 
  var config = UIButton.Configuration.filled()
  config.baseBackgroundColor = UIColor.greenColor()
  attendanceButton.configuration = config
 else 
  attendanceButton.backgroundColor = UIColor.greenColor()

在您的prepareForReuse 函数中或在您将单元格出列之后运行类似的操作,它应该会再次开始工作。 iOS 15 中有更多使用该配置结构的自定义选项,因此请深入研究它以配置按钮的所有其他方面。

【讨论】:

以上是关于如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-C 控制器中以编程方式加载用 swift 编写的自定义 XIB 视图

如何在 SWIFT 中以编程方式将我的自定义控制器变成根控制器? (无法加载 NIB)

如何在 Swift 中以编程方式从 UIView 中删除安全区域?

如何在 Swift 中以编程方式更改设备方向?

如何在 Swift 中以编程方式更改 UIButton 状态

在 Swift 中以编程方式更改 UIButton 的文本(填充)