如何在 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 中删除安全区域?