У меня есть следующая пользовательская ячейка:
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(...)
работает, поэтому я понятия не имею, что происходит.
У кого-нибудь есть идея?
Заранее спасибо.
EDIT
Когда я собираю приложение, добавьте button1.setTitle("asldkfa", for: .normal)
в didSet
и щелкните по ячейке, это будет вывод:
Это означает, что backgroundColor
установлено, так как заголовок изменяется, но не цвета.
ВАЖНО : нет другого кода, в котором backgroundColor
явно изменен, а метод didSelectRowAt
даже не реализован. Когда ячейка выбрана, backgroundColor ее подпредставлений автоматически обновляется, поэтому в данный момент я меняю цвет, выбирая ячейку.