在 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/Objective-c 中按媒体类型自定义图像选择器
在 Swift 中按下 uibutton 时更改色调图像颜色