【发布时间】:2016-08-05 05:39:49
【问题描述】:
我有一个自定义 UIButton (SelectionButton),我想知道如何制作它,以便在按下后背景颜色会发生变化 - 导致它在每个已按下的 SelectionButton 实例中保持该颜色。
我可以在一行代码中执行此操作,该代码行适用于每个 SelectionButton,而无需在 IBAction 中一次编写一个代码吗?
【问题讨论】:
我有一个自定义 UIButton (SelectionButton),我想知道如何制作它,以便在按下后背景颜色会发生变化 - 导致它在每个已按下的 SelectionButton 实例中保持该颜色。
我可以在一行代码中执行此操作,该代码行适用于每个 SelectionButton,而无需在 IBAction 中一次编写一个代码吗?
【问题讨论】:
我建议您使用以下解决方案。对 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)
}
最后是选择器指向的clickButton函数:
func clickButton(sender: SelectionButton) {
sender.selected = !sender.selected
}
请记住,最新版本的 Swift 中选择器语法已更改。
【讨论】:
我想这会对你有所帮助 -
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
}
【讨论】:
您可以在代码中更改不同状态的颜色,例如
mybutton.setTitleColor(UIColor.redColor(), forState: UIControlState.Selected)
【讨论】: