我想使用扩展名将自定义init添加到UIButton类中
extension UIButton {
init() {
backgroundColor = InterfaceDesign.button.backgroundColor
setTitleColor(InterfaceDesign.button.textColor, for: .normal)
}
}
第一个问题是此错误:
不能在'UIButton'的扩展名中声明指定的初始化程序;您是说这是一个方便的初始化方法吗?
然后,如果我单击红色的白色圆点将其修复,它将像前面这样插入便利:
convenience init()
但是随后出现此错误:
具有Objective-C选择器'init'的初始化器'init()'与具有相同Objective-C选择器的隐式初始化器'init()'发生冲突
我已经尝试过谷歌搜索,但是只找到了uibutton子类的工作代码...
感谢您的帮助
答案 0 :(得分:3)
无论您打算做什么,我已经在使用相同的东西。 我创建了UIButton扩展,并在其中创建了应用样式的功能。
extension UIButton {
func setTitleFont() {
self.titleLabel!.font = UIDevice.current.userInterfaceIdiom == .phone ? Typography.robotoBold14 : Typography.robotoBold16
}
}
用法:
btnSave.setTitleFont()
注意:排版是我自定义的字体枚举。
答案 1 :(得分:3)
您无法做您想做的事情。有两个相互影响的原因。
您正在尝试重新定义init()
。你不能那样做。您将需要创建一个便捷初始化程序,该便捷初始化程序的参数与现有的初始初始化程序不同,并且该便捷初始化程序最终需要调用指定的初始化程序。
答案 2 :(得分:1)
struct Dummy { }
extension UIButton {
convenience init(dummy: Dummy) {
self.init()
backgroundColor = InterfaceDesign.button.backgroundColor
setTitleColor(InterfaceDesign.button.textColor, for: .normal)
}
}
UIButton(dummy: Dummy())