我想创建一个全局函数,该函数会影响所有UIButton实例或仅影响某些UIButton类型的实例,这些实例会更新转角半径或border属性。我熟悉UIAppearances,但是我的客户希望拥有一个全局文件,他们可以在其中动态更新更改,就好像它是CSS样式表一样。到目前为止,我已经能够扩展UIColor和UIFont,这些扩展返回特定的颜色和字体,但是我不知道这对于UIButton实例如何工作。到目前为止,这是我一直想的,但是我认为这不起作用:
@objc extension UIButton {
func changeUIButtonBorder() -> UIButton {
self.layer.borderWidth = 3
self.layer.borderColor = UIColor.white.cgColor
return self
}
}
答案 0 :(得分:2)
您正在做的事情很棒,并且确实适用于UIButton实例。但是没有必要返回。在扩展名中,self
是按钮。这样它就可以改变自己。
@objc extension UIButton {
func changeUIButtonBorder() {
self.layer.borderWidth = 3
self.layer.borderColor = UIColor.white.cgColor
}
}
您现在可以在任何 UIButton实例上调用changeUIButtonBorder
。
@IBOutlet var myButton : UIButton!
override func viewDidLoad() {
super.viewDidLoad()
myButton.changeUIButtonBorder()
}
但是,没有一种神奇的方法可以向所有应该调用该方法的UIButton喊叫;您将不得不一次与他们打交道。
正如@Sh_Khan建议的那样,“神奇”方式是使UIButton子类在其自己的初始化程序中调用changeUIButtonBorder
。然后,您只需要确保所有按钮都是该子类的实例即可。
例如,这是一个始终为红色的UIButton子类(假设所有实例都来自情节提要):
class RedButton : UIButton {
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = .red
}
}