如何更改使用IBAction注册的自定义UIButton的颜色?
问题描述:
我已经创建了一个名为RegistrationButton的自定义UIButton。我目前正在尝试允许用户在三个按钮之间进行选择。在选择一个按钮时,背景颜色和文字将会改变。 这里是IBAction为的样子:如何更改使用IBAction注册的自定义UIButton的颜色?
@IBAction func didTapBUtton(_ sender: UIButton) {
switch sender {
case studentButton:
studentButton.selected()
professionalButton.notSelected()
entrepreneurhsip.notSelected()
break
case professionalButton:
studentButton.notSelected()
professionalButton.selected()
entrepreneurhsip.notSelected()
break
case entrepreneurhsipButton:
studentButton.notSelected()
professionalButton.notSelected()
entrepreneurhsip.selected()
break
default:
break
}
}
这里是我的自定义的UIButton类如何:
import UIKit
class RegistrationButton: UIButton {
override func awakeFromNib() {
super.awakeFromNib()
addBorder()
}
required init(coder:NSCoder) {
super.init(coder:coder)!
}
func addBorder(){
self.layer.borderColor = UIColor.white.cgColor
self.layer.borderWidth = 1
}
func selected(){
self.backgroundColor = .white
self.setTitleColor(UIColor(red:67,green:204,blue:144,alpha:1), for: .normal)
}
func notSelected(){
self.backgroundColor = UIColor(red:67,green:204,blue:144,alpha:1)
self.setTitleColor(UIColor.white, for: .normal)
}
}
答
的RGB值必须0
和1
之间浮点。您只需要将所有参数除以255
即可使其工作。
因此,例如
self.backgroundColor = UIColor(red:67,green:204,blue:144,alpha:1)
应该
self.backgroundColor = UIColor(red: 67.0/255, green: 204.0/255, blue:144.0/255, alpha:1)
(当你申请的标题一样的颜色显然也适用)
旁注:斯威夫特一switch
不默认情况下,所以你可以省略break
。如果你明确需要这种行为,那么有一个fallthrough
关键字。
答
您可能会看到使用UIControlEvents时看到的内容。
self.addTarget(target, action: action, for: .touchUpInside)
这是一个简单的例子。当然,你不需要像awakeFromNib和所有其他代码那样的东西 - 让操作系统工作。
这里的其他东西,你可以编写针对** addTarget(为:):
public static var touchDown: UIControlEvents { get } // on all touch downs
public static var touchDownRepeat: UIControlEvents { get } // on multiple touchdowns (tap count > 1)
public static var touchDragInside: UIControlEvents { get }
public static var touchDragOutside: UIControlEvents { get }
public static var touchDragEnter: UIControlEvents { get }
public static var touchDragExit: UIControlEvents { get }
public static var touchUpInside: UIControlEvents { get }
public static var touchUpOutside: UIControlEvents { get }
public static var touchCancel: UIControlEvents { get }
我的底线是什么?让操作系统为您做好工作!
答
如果所有你想要做正在改变按钮的亮点则另一种方法是将所有的按钮连接到出口集合 @IBOutlet var buttons: [UIButton]!
在您的视图/控制器。
@IBAction func didTapBUtton(_ sender: UIButton) {
// Select the button that was tapped, unselect the other buttons
buttons.forEach { $0.isSelected = ($0 == sender) }
}
这样可以使代码的简单小规模,但变得低效的许多按钮,因为它是一个有点: 然后,在didTapButton(_ sender: UIButton)
基于哪个按钮被窃听(像这样),你更新按钮选择属性无用地循环每一个按钮只是为了避免其中的一个。如果管理许多按钮,另一种方法是在你的控制器使用一个可选的selectedButton属性:
var selectedButton: UIButton?
@IBAction func didTapBUtton(_ sender: UIButton) {
selectedButton?.isSelected = false
sender.isSelected = true
selectedButton = sender
}
或您可以利用didSet机制斯威夫特:
var selectedButton: UIButton? {
didSet {
oldValue?.isSelected = false
selectedButton.isSelected = true
}
}
/.../
@IBAction func didTapBUtton(_ sender: UIButton) {
selectedButton = sender
}
向上投票。即使事情的基本原因是提问者不理解如何使用UIButton,远远不足以满足需求。 – dfd