【发布时间】:2018-08-13 18:09:16
【问题描述】:
在一个UIControl中,如果我重写isHighlighted来设置一个私有的_isHighlighted属性,然后检查控件的state看它是否包含.highlighted,状态仍然准确地反映了变化。请参阅下面的代码。
我的问题是,这怎么可能?我从不打电话给super.isHighlighted 或操纵状态属性。 state 是一个 OptionSet ,它必须将 .highlighted 属性插入集合中,据我所知,如果我覆盖该属性,则不会或不应该发生这种情况。
我能想到的唯一其他解释是state 实际上是基于其他属性(即isSelected、isEnabled 等)的计算属性
class MyControl: UIControl {
private var _isHighlighted: Bool = false
override var isHighlighted: Bool {
get { return self._isHighlighted }
set { self._isHighlighted = newValue }
}
}
let myControl = MyControl()
myControl.isHighlighted = true
myControl.state.contains(.highlighted) // returns true
【问题讨论】:
标签: swift uicontrol uicontrolstate