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

table cell

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

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

有没有人有想法?

提前致谢。

编辑

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

enter image description here

意思是backgroundColor被设置,因为标题确实改变了,而不是颜色。

重要提示:没有其他代码明确更改backgroundColor并且甚至没有实现didSelectRowAt方法。选择单元格后,其子视图的backgroundColor会自动更新,这样我就可以通过选择单元格来改变颜色。

答案

更新:你实际上想要使用UIButton,而不是使用backgroundColorsetBackgroundImage(_:for:)属性。您可以在UIImageextension 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 设置“背景颜色”动画

当有长按手势识别器时,UIButton 不会改变文本颜色

在 Swift 中按任意键更改自定义 UIButton 的 BG 颜色

MFC的CListControl列表怎么实现拖动鼠标左键选取一片表格?并改变表格背景颜色

iOS UIButton(按钮)点击改变背景色和标题颜色的简单实现

UIButton自定义按钮不会在选择时更改字体颜色