Swift: 当按钮被点击时改变颜色

3

我刚接触Swift,想要在按钮按下时更改其颜色。当用户点击按钮后,按钮应该变色,并且松开时应该回到原来的颜色。

一个例子是计算器。当你按下按钮时,它会从浅灰色变成深灰色,当用户抬起手指时,它会回到原来的浅灰色。那么我该怎么做呢?

目前,我只有以下代码:

@IBAction func changeButtonColourOnTouch(sender: UIButton) {

    zeroButton.backgroundColor = UIColor.blueColor()

}

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

你可以使用winterized的答案 - Tada
5个回答

5
问题是,在释放按钮后,您应该将颜色返回到原始状态。
您可以直接从故事板中链接,在动作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中所提供的代码已经进行了修改。


按下按钮并将其拖到其他位置是无效的,请检查并更正。 - Pulkit Kumar Singh

3
上面的勾选答案是有效的,但是如果用户按住按钮并拖动,背景颜色不会恢复正常。这是一个微小的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
}

你能更准确地指明你所参考的答案,并提供一个完整的答案吗?否则,如果你所参考的答案发生变化,你的答案也会随之改变意义,甚至更糟糕的是,变得误导人。 - glennsl

1
如果您想为编程定义的按钮执行此操作,只需在其初始化期间将按钮声明为系统类型即可:
 let button = UIButton(type: .system)

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)

现在颜色会自动变化,您不必手动处理。

1
你也可以使用轻拍手势,在用户轻触按钮时更改按钮的颜色。
你可以查看苹果关于UIGestureRecognizer的文档这里
这有点高级,但你会从中学到很多东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接