通过外观代理使用设置器方法

时间:2019-03-30 12:20:00

标签: ios swift macos

我创建了一个自定义控件,该控件要在其中配置各种状态的边框颜色色。

理想情况下,我可以这样做:

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?
}

0 个答案:

没有答案