我有以下自定义单元格:
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会自动更新,因此我现在通过选择该单元格来更改颜色。
答案 0 :(得分:1)
已更新:您实际上不是在使用UIButton
的{{1}}属性,而是在使用backgroundColor
。您可以在setBackgroundImage(_:for:)
(extension example here)上使用扩展名从颜色创建图像,并且该图像应该可以很好地满足您的尝试。
您得到的配置代码应类似于:
UIImage
答案 1 :(得分:-2)
实际上,问题在于didSet是您添加的颜色,因此在更改颜色时将保持不变,您应该这样做
sti