Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改自定义UIButton';在Swift中的任何印刷机上都有s BG颜色_Ios_Iphone_Swift_Uibutton - Fatal编程技术网

Ios 更改自定义UIButton';在Swift中的任何印刷机上都有s BG颜色

Ios 更改自定义UIButton';在Swift中的任何印刷机上都有s BG颜色,ios,iphone,swift,uibutton,Ios,Iphone,Swift,Uibutton,我有一个自定义的UIButton(SelectionButton),我想知道如何使其在按下后背景颜色发生变化——使其在按下SelectionButton的每个实例时都保持该颜色 我能用一行代码来完成这项工作吗?它可以适用于每个SelectionButton,而不必在iAction中一次编写一个代码?我想这会对您有所帮助- let discoverButton:UIButton = UIButton(frame: CGRect(x:100 , y: 40.0, width: 360.0, heig

我有一个自定义的UIButton(SelectionButton),我想知道如何使其在按下后背景颜色发生变化——使其在按下SelectionButton的每个实例时都保持该颜色


我能用一行代码来完成这项工作吗?它可以适用于每个SelectionButton,而不必在iAction中一次编写一个代码?

我想这会对您有所帮助-

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
        }

我建议你采用以下解决方案。对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
}

这是一个可以更好地满足您需求的解决方案

这是班级选择按钮:

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)
}
最后点击选择器指向的按钮功能:

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

请记住,在最新版本的Swift中,slector语法已经更改。

您可以在以下代码中更改不同状态的颜色:


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

如前所述,我使用名为SelectionButton的自定义类来完成此操作。当我在第1行用SelectionButton替换UIButton时,我得到了UIColor作为未解析标识符的错误(这对我来说没有意义..因为SelectionButton是UIButton的子类),我只是尝试了这个。。。我做了一个:class SelectionButton:UIButton{…},并将扩展中的代码放到这个新类中。对UIColor没有任何问题。我建议您检查导入列表…我得到“无法分配到属性:发送方是一个'let'常量”。我查了一下,没有弹出解决方案。看起来还是很奇怪。我需要看一下代码。我不知道你为什么要换寄件人。更改发送者指向的对象的属性是可以的。这个问题用新的眼光来看是显而易见的。。我需要将iAction中的(sender:UIButton)更改为(sender:SelectionButton),以反映自定义子类。更新答案并进行核对。非常感谢。