Swift UIButton背景颜色不会改变
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift UIButton背景颜色不会改变相关的知识,希望对你有一定的参考价值。
我有以下自定义单元格:
class MyCell: UITableViewCell {
func configure(title1: String, title2: String) {
backgroundColor = .red
let myView = MyView(frame: frame)
myView.button1.setTitle(title1, for: .normal)
myView.button2.setTitle(title2, for: .normal)
addSubview(myView)
}
}
和自定义视图:
class MyView: UIView {
var button1: UIButton!
var button2: UIButton!
override var backgroundColor: UIColor? {
didSet {
guard UIColor.clear.isEqual(backgroundColor) else { return }
button1.setTitle("asldkfa")
button1.backgroundColor = .blue
button2.backgroundColor = .yellow
}
}
override init(frame: CGRect) {
super.init(frame: frame)
button1 = UIButton()
button2 = UIButton()
button1.backgroundColor = .purple
button2.backgroundColor = .brown
backgroundColor = .gray
let stackView = UIStackView(); stackView.distribution = .fill; stackView.alignment = .fill
stackView.addArrangedSubview(button1)
stackView.addArrangedSubview(button2)
addSubview(stackView)
}
}
我在我的tableView:cellForRowAt
方法中初始化了单元格视图,如下所示:
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCell
cell.configure(title1: "Foo", title2: "Bla")
我在tableView中得到以下输出:
每次MyView
的颜色在外部改变时(例如点击单元格时),我想要改变按钮的颜色 - 这就是为什么我在didSet
中覆盖了backgroundColor
的MyView
观察者。最终我希望这些颜色是随机的,但在这里我只是想改变button1.backgroundColor = .blue
。
它不起作用,按钮的颜色不会改变。我甚至尝试过更换tintColor
,它也不起作用。使用button1.setTitle(...)
更改标题确实有效,所以我不知道发生了什么。
有没有人有想法?
提前致谢。
编辑
当我构建应用程序时,在button1.setTitle("asldkfa", for: .normal)
中添加didSet
,然后单击单元格,这是输出:
意思是backgroundColor
被设置,因为标题确实改变了,而不是颜色。
重要提示:没有其他代码明确更改backgroundColor
并且甚至没有实现didSelectRowAt
方法。选择单元格后,其子视图的backgroundColor会自动更新,这样我就可以通过选择单元格来改变颜色。
更新:你实际上想要使用UIButton
,而不是使用backgroundColor
的setBackgroundImage(_:for:)
属性。您可以在UIImage
(extension example here)上使用扩展来从颜色创建图像,这应该适合您正在尝试的操作。
您生成的配置代码应如下所示:
button1.setBackgroundImage(.image(with: .red), for: .normal)
实际上,问题是它确实设置了你添加的颜色,所以在更改它时,你应该像这样做
override var backgroundColor: UIColor? {
didSet {
button1.backgroundColor = backgroundColor
button2.backgroundColor = backgroundColor
}
}
以上是关于Swift UIButton背景颜色不会改变的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 3 为 iOS 中的 UIButton 设置“背景颜色”动画
在 Swift 中按任意键更改自定义 UIButton 的 BG 颜色
MFC的CListControl列表怎么实现拖动鼠标左键选取一片表格?并改变表格背景颜色