突出显示的Swift UIButton色调文字

时间:2018-04-12 03:11:59

标签: ios swift uibutton

在我的应用程序中,我有一个按钮,文本标题旁边是一个图像按钮。我希望两个按钮的配色方案相匹配。我用这样的图像创建按钮:

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;自动" (而不是硬编码色调)。

2 个答案:

答案 0 :(得分:2)

色调是UIView的属性,它没有状态。 State是UIControl的属性(Button的父类)。意味着你不能在按钮状态的基础上改变色调。默认情况下,您只能根据按钮的状态更改此屏幕截图中提到的属性。

enter image description here

  

深色,黑色绿色

为您获取按钮的默认行为,以更改背景颜色以显示突出显示的状态

解决方案: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
}