我创建了一个自定义控件,该控件要在其中配置各种状态的边框颜色色。
理想情况下,我可以这样做:
let appearance = MyView.appearance()
appearance.set(borderTintColor: .red, forControlState: .normal)
appearance.set(borderTintColor: .blue, forControlState: .disabled)
除了在调用第一个setter时发生Thread 1: EXC_BAD_ACCESS (code=2, address=0x105916e78)
崩溃。
这是我的自定义控件的外观:
class MyView: UIControl {
func set(borderTintColor: UIColor?, forControlState controlState: UIControl.State) {
// literally empty
}
}
我也尝试用@obcj
前缀该方法。我知道最终需要将其存储在某种字典中。实际上,这就是我开始的地方……并将其简化为一个问题。
要解决此问题,我正在为我支持的每个状态定义属性,但是我更喜欢使用上面的API,因为当您与UIControl
的子类进行交互时,它会更加熟悉。我也不需要继续为我支持的每个状态添加属性。
class MyView: UIControl {
dynamic var normalBorderTintColor: UIColor?
dynamic var disabledBorderTintColor: UIColor?
}