Swift 覆盖isHighlighted仍会更改uicontrol状态-为什么?

Swift 覆盖isHighlighted仍会更改uicontrol状态-为什么?,swift,uicontrol,uicontrolstate,Swift,Uicontrol,Uicontrolstate,在UIControl中,如果我覆盖isHighlighted以设置私有\u isHighlighted属性,然后检查控件的状态以查看其是否包含。高亮显示的,则状态仍然准确反映更改。请参阅下面的代码 我的问题是,这怎么可能?我从不调用super.ishighlight或操纵state属性状态是一个选项开始,必须将突出显示的属性插入到集合中,根据我的判断,如果我重写该属性,则不会或不应该发生这种情况 我能想到的唯一其他解释是,state实际上是基于其他属性的计算属性(即isSelected,isEn

UIControl
中,如果我覆盖
isHighlighted
以设置私有
\u isHighlighted
属性,然后检查控件的
状态
以查看其是否包含
。高亮显示的
,则状态仍然准确反映更改。请参阅下面的代码

我的问题是,这怎么可能?我从不调用
super.ishighlight
或操纵state属性<代码>状态是一个
选项开始
,必须将
突出显示的
属性插入到集合中,根据我的判断,如果我重写该属性,则不会或不应该发生这种情况

我能想到的唯一其他解释是,
state
实际上是基于其他属性的计算属性(即
isSelected
isEnabled
,等等)

我能想到的唯一其他解释是,状态实际上是基于其他属性(即isSelected、isEnabled等)的计算属性

很好的解释!让我们尝试在getter中记录(打印)以查看这是否正确:

class MyControl: UIControl {
    private var _isHighlighted: Bool = false
    override var isHighlighted: Bool {
        get { print("getting"); return self._isHighlighted }
        set { self._isHighlighted = newValue }
    }
}
let myControl = MyControl()
myControl.isHighlighted = true
print("about to check state")
myControl.state.contains(.highlighted)
print("checked state")
下面是日志:

about to check state
getting
checked state
你要证明什么

我能想到的唯一其他解释是,状态实际上是基于其他属性(即isSelected、isEnabled等)的计算属性

很好的解释!让我们尝试在getter中记录(打印)以查看这是否正确:

class MyControl: UIControl {
    private var _isHighlighted: Bool = false
    override var isHighlighted: Bool {
        get { print("getting"); return self._isHighlighted }
        set { self._isHighlighted = newValue }
    }
}
let myControl = MyControl()
myControl.isHighlighted = true
print("about to check state")
myControl.state.contains(.highlighted)
print("checked state")
下面是日志:

about to check state
getting
checked state

要进行演示。

是的。有趣。这对尝试实现我自己的自定义状态(即)有影响。我确实在这样做。看起来没有必要在状态的顶部设置自定义状态位掩码!哎呀。我想我需要更改一组代码:-(是的,很有趣。这对尝试实现我自己的自定义状态(即)有影响。我确实在这样做。看起来没有必要在状态上设置自定义状态位掩码!Yikes。我想我需要更改一组代码:-(