我创建了一个自定义按钮,并且在未启用时将其设置为灰色。但是,当我运行该程序时,禁用的按钮不会变灰。我可能做错了什么。
自定义按钮类:
import UIKit
class CustomButton: UIButton {
override init (frame: CGRect){
super.init(frame: frame)
config()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
config()
}
func config(){
// Setting disabled/enabled traits
setTitleColor(UIColor.gray, for: UIControl.State.disabled)
setTitleColor(UIColor.gray, for: UIControl.State.normal)
if !isEnabled{
backgroundColor = UIColor.gray
}else{
backgroundColor = UIColor.white
}
// Other styling options
layer.cornerRadius = 10
// Making it look 3D
layer.shadowColor = UIColor(red: 0.0, green: 0, blue: 0, alpha: 1.0).cgColor
layer.shadowOpacity = 1.0
layer.shadowRadius = 1.0
layer.shadowOffset = CGSize(width: 0, height: 1)
}
}
按钮初始化(也在 Storyboard中设置)
@IBOutlet weak var movePickPosBut: CustomButton!
最佳答案
您根据isEnabled
状态设置的背景颜色是静态的,而不是动态的;也就是说,在按钮构造时,您将检查它是否已启用(可能会启用)并相应地设置背景颜色。但是,当 isEnabled
标志更改时,这一点不会更改。
而是使用系统函数根据状态来控制后台。所以替换这段代码:-
if !isEnabled{
backgroundColor = UIColor.gray
}else{
backgroundColor = UIColor.white
}
有了这个:-
self.setBackgroundColor(UIColor.gray, for: .disabled)
这将使背景颜色与状态保持关联。
您还需要此代码,我从 this article 获取该代码(并可能提供进一步的帮助)。
extension UIButton {
private func image(withColor color: UIColor) -> UIImage? {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.setFillColor(color.cgColor)
context?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func setBackgroundColor(_ color: UIColor, for state: UIControlState) {
self.setBackgroundImage(image(withColor: color), for: state)
}
}
关于swift - 禁用时自定义按钮不显示为灰色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56117667/