ios - 更改自定义 UIButton 的背景颜色?

标签 ios swift uibutton

我一直在通过 self.layer.backgroundColor = someColor 设置按钮的背景颜色。

但是,这似乎不适用于自定义类?我有我使用的这个通用类:

class DarkButton: BaseButton {
    override func layoutSubviews() {
        super.layoutSubviews()

        self.layer.cornerRadius = 5
        self.setTitleColor(UIColor.black, for: .normal)
        self.setTitleColor(UIColor.lightGray, for: .highlighted)
        self.layer.backgroundColor = UIColor(red:0.77, green:0.77,
                                             blue:0.77, alpha: 1.0).cgColor
        self.clipsToBounds = false
    }

}

self.layer.backgroundColor 工作得很好。现在,如果我像这样扩展它:

class SuperCoolButton: DarkButton {

    required init() {
        super.init()
        self.setUp()
    }

    required init(spacing: Spacing) {
        super.init(spacing: spacing)
        self.setUp()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setUp()
    }

    func setUp() {
        self.generateImage()
        self.changeBGColor()
    }

    func generateImage() {
        let image = UIImage(named: "logoSmall") as UIImage?
        self.setImage(image, for: .normal)
        self.imageEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)
        self.imageView?.contentMode = .scaleAspectFit
    }

    func changeBGColor() {
        self.layer.backgroundColor = UIColor.red.cgColor
    }

}

backgroundColor 保持 DarkButton backgroundColor 的颜色,但是设置图像确实有效 >_>

最佳答案

发生这种情况是因为在 DarkButtonsetUp 方法之后调用了在父类(super class) (DarkButton) 中实现的 layoutSubviews()。您需要在类 SuperCoolButton 中重写 layoutSubviews 并在那里调用 setUp 而不是在其 init 方法中。

override func layoutSubviews() {
        super.layoutSubviews()
        setUp()
}

编辑: 我认为您应该移动在 DarkButton 类的 [layoutSubviews][1] 中编写的代码。

layoutSubviews 方法被多次调用,只有与 View 布局相关的代码应该在那里。

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want.

更改层的角半径和 setTitleColor 或背景颜色的理想位置是在自定义 View 的初始化处或 awakeFromNib 处:(仅当 View 始终在 nib 中设计时) .

因为您想稍后更改按钮的背景颜色。您可以简单地调用 SuperCoolButton 上的 changeBgColor 方法。早些时候它不起作用,因为 layoutSubviews 必须将背景颜色设置回默认值。

关于ios - 更改自定义 UIButton 的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322281/

相关文章:

ios - 使用 privateQueueConcurrencyType 在子上下文中保存数据

ios - 等待关闭结果进行返回

ios - UITableViewCell 被空数据源数组卡住

ios - 在 Swift 2.0 中自定义 UIButton 外观

ios - UIPageViewController 和 UIButton 混合使用

ios - UITableView beginUpdates/endUpdates 指定动画类型

ios - Firebase 了解用户是否确实与 Firebase 断开连接

ios - UICollectionView 比 NavigationController 大

ios - 单击多个 UIButton 如何同时播放多个声音?

iphone - UIActionsheet Ipad/Iphone