在我的应用程序中,我有一个按钮,文本标题旁边是一个图像按钮。我希望两个按钮的配色方案相匹配。我用这样的图像创建按钮:
let button1 = UIButton()
button1.setImage(
UIImage(named: "button1")?.withRenderingMode(.alwaysTemplate), for: .normal)
button1.tintColor = UIColor.green
这会在两个按钮上创建我想要的效果,即按钮为绿色,然后当它突出显示时,它会被染成更暗,黑色的绿色。我尝试以同样的方式创建文本按钮:
let button2 = UIButton()
button2.setTitle("button2", for: .normal)
button2.tintColor = UIColor.green
但是,在这种情况下,设置色调颜色不会改变按钮标题/文本的颜色(即使突出显示它也会保持白色)。我对此的解决方案如下:
let button2 = UIButton()
button2.setTitle("button2", for: .normal)
button2.setTitleColor(UIColor.green, for: .normal)
button2.setTitleColor(UIColor(red: 0x23 / 255.0,
green: 0x34 / 255.0,
blue: 0x16 / 255.0,
alpha: 1.0), for: .highlighted)
基本上,我估计了图像在高位时被着色的颜色,并将文本颜色设置为匹配。这样可以正常工作,但令我困扰的是我只有近似值;理想情况下,当按钮突出显示时,我希望系统为我设置文本颜色,其方式与调色图像相同。我知道这是一个非常小的问题,并且修复它可能会明显改善应用程序,但我仍然想知道是否有方法来修饰带有文本标题的按钮& #34;自动" (而不是硬编码色调)。
答案 0 :(得分:2)
色调是UIView的属性,它没有状态。 State是UIControl的属性(Button的父类)。意味着你不能在按钮状态的基础上改变色调。默认情况下,您只能根据按钮的状态更改此屏幕截图中提到的属性。
还
深色,黑色绿色
为您获取按钮的默认行为,以更改背景颜色以显示突出显示的状态
解决方案:CustomButton
创建自定义UIButton
class MyButton : UIButton {
override var isHighlighted: Bool{
didSet {
tintColor = isHighlighted ? UIColor.green : UIColor.red
// do additional work here according to your need
}
}
override var isSelected: Bool {
didSet {
// do changes according to you need
}
}
}
您还可以通过编程方式设置上图中提到的属性。
button.setTitleColor(UIColor.green, for: .normal)
button.setTitleColor(UIColor.red, for: .highlighted)
button.setBackgroundImage(yourBackgroundImage, for: .normal)
答案 1 :(得分:0)
let button2 = UIButton()
button2.addTarget(self, action: #selector(self.pressed), for: [.touchDown])
button2.addTarget(self, action: #selector(self.released), for: [.touchDragExit, .touchUpInside, .touchUpOutside, .touchCancel])
func pressed() {
// set colour
}
func released() {
// set colour
}