在 Swift 中按任意键更改自定义 UIButton 的 BG 颜色

Posted

技术标签:

【中文标题】在 Swift 中按任意键更改自定义 UIButton 的 BG 颜色【英文标题】:Change Custom UIButton's BG Color on Any Press in Swift 【发布时间】:2016-08-05 05:39:49 【问题描述】:

我有一个自定义 UIButton (SelectionButton),我想知道如何制作它,以便在按下后背景颜色会发生变化 - 导致它在每个已按下的 SelectionButton 实例中保持该颜色。

我可以在一行代码中执行此操作,该代码行适用于每个 SelectionButton,而无需在 IBAction 中一次编写一个代码吗?

【问题讨论】:

【参考方案1】:

我建议您使用以下解决方案。对 UIButton 类进行扩展:

extension UIButton 
override public var selected: Bool 
    didSet 
        if self.selected 
            self.backgroundColor = UIColor.greenColor()
            
            else 
                self.backgroundColor = UIColor.redColor()
            
    

然后在连接到 UIButton 的 TouchUpInside(或另一个事件)的代码中添加:

@IBAction func myButtonClick(sender: UIButton) 
    sender.selected = !sender.selected

【讨论】:

如前所述,我正在使用一个名为 SelectionButton 的自定义类。当我在第 1 行中将 UIButton 替换为 SelectionButton 时,我收到错误,因为 UIColor 是一个未解析的标识符(这对我来说没有意义......因为 SelectionButton 是 UIButton 的子类) 我刚试过这个...我做了一个:class SelectionButton: UIButton ... 并将扩展中的代码放到这个新类中。 UIColor 没有问题。我建议你检查导入列表... 我收到“无法分配给属性:发件人是一个‘让’常量。”我查了一下,没有弹出解决方案。还在寻找 这很奇怪。我需要看一下代码。我不知道你为什么要更改发件人。可以更改发送者指向的对象的属性。 用新鲜的眼光看问题很明显。我需要将 IBAction 中的 (sender: UIButton) 更改为 (sender: SelectionButton) 以反映自定义子类。更新了答案并将其选中。谢谢!【参考方案2】:

这里是更适合您需求的解决方案。

这是类选择按钮:

class SelectionButton: UIButton 
override var selected: Bool 
    didSet 
        if self.selected 
            self.backgroundColor = UIColor.greenColor()
        
        else 
            self.backgroundColor = UIColor.redColor()
        
    

以及将以编程方式创建按钮实例的代码:

    @IBAction func createSelButton(sender: AnyObject) 
    let myButton = SelectionButton()
    myButton.frame = CGRect(x: 100, y: 200, width: 200, height: 25)

    self.view.addSubview(myButton)
    myButton.setTitle("My Selection Button", forState: UIControlState.Normal);
    myButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)

    myButton.addTarget(self, action: "clickButton:", forControlEvents: UIControlEvents.TouchUpInside)

最后是选择器指向的clickButton函数:

    func clickButton(sender: SelectionButton) 
    sender.selected = !sender.selected

请记住,最新版本的 Swift 中选择器语法已更改。

【讨论】:

【参考方案3】:

我想这会对你有所帮助 -

let discoverButton:UIButton = UIButton(frame: CGRect(x:100 , y: 40.0, width: 360.0, height: 70.0 ))
        discoverButton.setBackgroundImage(UIImage(named: "discover-white.png"), forState: UIControlState.Normal)
        discoverButton.setBackgroundImage(UIImage(named: "discover-blue.png"), forState: UIControlState.Focused)
         discoverButton.setBackgroundImage(UIImage(named: "discover-blue.png"), forState: UIControlState.Selected)
        discoverButton.addTarget(APP_DELEGATE, action:#selector(YourClassName.MenuButtonsPrimaryActionTriggered(_:)), forControlEvents: UIControlEvents.PrimaryActionTriggered)
        discoverButton.userInteractionEnabled  = true;
        discoverButton.tag=101



 func MenuButtonsPrimaryActionTriggered(btn:UIButton)->Void
        
//Action performed on button
        

【讨论】:

【参考方案4】:

您可以在代码中更改不同状态的颜色,例如

mybutton.setTitleColor(UIColor.redColor(), forState: UIControlState.Selected)

【讨论】:

以上是关于在 Swift 中按任意键更改自定义 UIButton 的 BG 颜色的主要内容,如果未能解决你的问题,请参考以下文章

停止重复使用自定义单元格 Swift

在 Swift/Objective-c 中按媒体类型自定义图像选择器

在 Swift 中按下返回键时在文本字段之间切换

在 Swift 中按下 uibutton 时更改色调图像颜色

如何防止在WinForms TextBox中按下alt键引起的哔声?

在 Swift 中按计算的距离对数组进行排序