Swift UIButton背景颜色不变

时间:2018-08-30 15:19:16

标签: ios swift uibutton uibackgroundcolor

我有以下自定义单元格:

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中得到以下输出:

table cell

每次外部更改MyView的颜色时(例如,单击单元格时),我都希望按钮的颜色发生变化–这就是为什么我覆盖了didSet观察者的原因backgroundColor中的MyView。最终,我希望这些颜色是随机的,但在这里我只是想更改button1.backgroundColor = .blue

它不起作用,按钮的颜色不变。我什至尝试更改tintColor,但它也不起作用。使用button1.setTitle(...)更改标题确实可以,所以我不知道发生了什么。

有人有主意吗?

谢谢。

编辑

构建应用程序时,在button1.setTitle("asldkfa", for: .normal)内添加didSet,然后单击单元格,这是输出:

enter image description here

这意味着backgroundColor已设置,因为标题确实发生了变化,只是颜色没有变化。

重要:没有其他代码可以显式更改backgroundColor,甚至没有实现didSelectRowAt方法。选择一个单元格后,其子视图的backgroundColor会自动更新,因此我现在通过选择该单元格来更改颜色。

2 个答案:

答案 0 :(得分:1)

已更新:您实际上不是在使用UIButton的{​​{1}}属性,而是在使用backgroundColor。您可以在setBackgroundImage(_:for:)extension example here)上使用扩展名从颜色创建图像,并且该图像应该可以很好地满足您的尝试。

您得到的配置代码应类似于:

UIImage

答案 1 :(得分:-2)

实际上,问题在于didSet是您添加的颜色,因此在更改颜色时将保持不变,您应该这样做

sti