Button.isHighlighted时如何更改bordercolor

时间:2016-10-26 21:17:14

标签: swift

我想知道当我点击或突出显示时,我如何在我的UIButton周围改变不透明度以及其中的文字。

我的逻辑告诉我,它应该是这样的......但它似乎不起作用:

    //BTN STYLING

    btnstd.layer.cornerRadius = 5
    btnstd.layer.borderWidth = 1.5
    btnstd.layer.borderColor = UIColor.white.cgColor

    //Change bordercolor when highlighted
    if(btnstd.isHighlighted) {
    btnstd.layer.borderColor = UIColor(white:1,alpha:0.3).cgColor
    }

顺便提一下我的ViewDidLoad()函数

2 个答案:

答案 0 :(得分:5)

我对此进行了测试,希望它能满足您的需求!或者至少指出你的方向。你正在寻找的动作(我认为)是.touchDown和任何东西.touchUp。

override func viewDidLoad() {
    super.viewDidLoad()
    theButton.setTitle("Normal", for: .normal)
    theButton.setTitle("Highlighted", for: .highlighted)
    theButton.layer.borderColor = UIColor.red.cgColor
    theButton.layer.borderWidth = 1
    theButton.addTarget(self, action: #selector(startHighlight), for: .touchDown)
    theButton.addTarget(self, action: #selector(stopHighlight), for: .touchUpInside)
    theButton.addTarget(self, action: #selector(stopHighlight), for: .touchUpOutside)
}
func startHighlight(sender: UIButton) {
    theButton.layer.borderColor = UIColor.green.cgColor
    theButton.layer.borderWidth = 1
}
func stopHighlight(sender: UIButton) {
    theButton.layer.borderColor = UIColor.red.cgColor
    theButton.layer.borderWidth = 1
}

答案 1 :(得分:0)

这取决于你想要做什么。

案例#1:您希望在突出显示按钮时发生此更改,但在正常状态下具有不同的属性集。

let theButton = UIButton()
// set common properties and layout code
theButton.setTitle("Normal", for: .normal)
theButton.setTitle("Highlighted", for: .highlighted)

此外,您还可以直接编码setTitleColor(),setAttributedTitle,setTitleShadowColor(),setImage()和setBackgroundImage()。

在这种情况下,边框颜色需要一个子类(不是扩展名,你需要公共属性),你需要在自己点击一个轻击手势后检查self.layer.hitTest()。

案例#2:您希望按钮状态在单击时更改,并保持更改。

你是那里的一部分。如果您在IB中提供按钮,请确保为事件touchUpInside添加IBAction。如果您正在使用代码,这里是Swift 3语法。

theButton.addTarget(self, action: #selector(changeButton), for: .touchUpInside)

func changeButton(sender: UIButton) {
    sender.setTitle("New Title", for: .normal)
    sender.layer.borderColor = UIColor.red.cgColor
}

我的偏好(但仅限于此)是为我的行为更强烈地键入发件人(我认为这是正确的术语)。我确信在AnyObject上使用特定的发送者(比如UIButton)有利有弊,但在这种情况下,我认为最大的原因是你不需要强制将发送者强制转换为UIButton。