【问题标题】:Swift: Change colour of button when tappedSwift:点击时更改按钮的颜色
【发布时间】:2016-03-01 17:46:16
【问题描述】:

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

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

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

@IBAction func changeButtonColourOnTouch(sender: UIButton) {

    zeroButton.backgroundColor = UIColor.blueColor()

}

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

【问题讨论】:

  • 你可以使用这个answer by winterized。

标签: ios swift


【解决方案1】:

问题是,松开按钮后,颜色应该恢复到原来的状态。

您可以直接从情节提要链接,在动作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()
    }

目前在链接UIButton with hold down action and release action中改编的代码

【讨论】:

  • 按下按钮拖到别的地方就不行了,请检查并改正
【解决方案2】:

上面的检查答案有效,但如果用户按住按钮,然后拖出,背景颜色将不会恢复正常。这是一个很小的 ​​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
}

【讨论】:

  • 您能否更准确地指定您参考的答案,并提供完整的答案?否则,如果您所指的答案发生了变化,那么您的答案的含义也会发生变化,或者更糟的是,它会变得完全具有误导性。
【解决方案3】:

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

您可以在here 中查看有关 UIGestureRecognizer 的苹果文档

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

【讨论】:

    【解决方案4】:

    您还可以使用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)
    

    现在颜色会自动变化,您无需手动处理。

    【讨论】:

      【解决方案5】:

      如果你想要一个以编程方式定义的按钮,只需在初始化期间声明系统类型的按钮:

       let button = UIButton(type: .system)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2021-07-07
        • 2013-11-08
        • 2012-12-06
        • 2016-09-08
        相关资源
        最近更新 更多