Swift:点击时改变按钮的颜色

时间:2016-03-01 17:46:17

标签: ios swift

我是Swift的新手,我试图更改按钮颜色。当点击按钮时,它应该改变颜色,当释放时它应该回到原始按钮颜色。

这方面的一个例子是计算器。当您点击一个按钮时,它会从浅灰色变为深灰色,当用户将手指从按钮上移开时,它会恢复为原始的浅灰色。我该怎么做呢?

到目前为止,我只有这个......

@IBAction func changeButtonColourOnTouch(sender: UIButton) {

    zeroButton.backgroundColor = UIColor.blueColor()

}

上面的代码将按钮颜色更改为蓝色但保持蓝色。

5 个答案:

答案 0 :(得分:6)

问题是,在释放按钮后,您应该将颜色恢复到原始状态。

您可以在动作TouchUpInside(发布)和TouchDown(按)中直接从故事板链接,以在每个事件中将按钮颜色更改为正确的状态。

enter image description here

或者您可以按代码在按钮中添加目标,链接到功能,如下面的代码所示。

    zeroButton.addTarget(self, action: Selector("holdRelease:"), forControlEvents: UIControlEvents.TouchUpInside);
    zeroButton.addTarget(self, action: Selector("HoldDown:"), forControlEvents: UIControlEvents.TouchDown)

    //target functions   
    func HoldDown(sender:UIButton)
    {
    zeroButton.backgroundColor = UIColor.blueColor()
    }

    func holdRelease(sender:UIButton)
    {
    zeroButton.backgroundColor = UIColor.whiteColor()
    }

目前在链接UIButton with hold down action and release action

中修改的代码

答案 1 :(得分:1)

您还可以使用点按手势并在用户点按按钮时更改按钮的颜色

您可以在here

中查看有关UIGestureRecognizer的Apple文档

它有点先进,但你会从中学到很多东西。

答案 2 :(得分:1)

您还可以使用setbackgroundImageForState将彩色图像定义为您感兴趣的所有UIControlState的按钮背景,例如正常,突出显示,已禁用,已选中。

let cx = UIGraphicsGetCurrentContext()
let color = UIColor.redColor()
let state = UIControlState.Selected

UIGraphicsBeginImageContext(CGSize(width:1, height:1))
CGContextSetFillColorWithColor(cx, color.CGColor)
CGContextFillRect(cx, CGRect(x:0, y:0, width:1, height:1))
let colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

self.zeroButton.setBackgroundImage(colorImage, forState: state)

现在颜色会自动更改,您无需手动处理。

答案 3 :(得分:0)

上面选中的答案有效,但是如果用户按住按钮然后将其拖出,则背景色将不会恢复正常。这是一个很小的UI错误,但是很简单。这包括已检查答案的代码。

    zeroButton.addTarget(self, action: #selector(holdRelease), for: .touchUpInside);
zeroButton.addTarget(self, action: #selector(heldDown), for: .touchDown)
 zeroButton.addTarget(self, action: #selector(buttonHeldAndReleased), for: .touchDragExit)

//target functions   
@objc func heldDown()
{
zeroButton.backgroundColor = .blue
}

@objc func holdRelease()
{
zeroButton.backgroundColor = .white
}

@objc func buttonHeldAndReleased(){
    zeroButton.backgroundColor = .blue
}

答案 4 :(得分:-1)

如果您希望以编程方式定义按钮,只需在初始化期间声明类型为system的按钮:

 let button = UIButton(type: .system)