我是Swift的新手,我试图更改按钮颜色。当点击按钮时,它应该改变颜色,当释放时它应该回到原始按钮颜色。
这方面的一个例子是计算器。当您点击一个按钮时,它会从浅灰色变为深灰色,当用户将手指从按钮上移开时,它会恢复为原始的浅灰色。我该怎么做呢?
到目前为止,我只有这个......
@IBAction func changeButtonColourOnTouch(sender: UIButton) {
zeroButton.backgroundColor = UIColor.blueColor()
}
上面的代码将按钮颜色更改为蓝色但保持蓝色。
答案 0 :(得分:6)
问题是,在释放按钮后,您应该将颜色恢复到原始状态。
您可以在动作TouchUpInside
(发布)和TouchDown
(按)中直接从故事板链接,以在每个事件中将按钮颜色更改为正确的状态。
或者您可以按代码在按钮中添加目标,链接到功能,如下面的代码所示。
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()
}
中修改的代码
答案 1 :(得分:1)
答案 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)