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

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

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

【问题讨论】:

    标签: ios iphone swift uibutton


    【解决方案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)

        【讨论】:

          猜你喜欢
          • 2015-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-03
          相关资源
          最近更新 更多