簡體   English   中英

覆蓋 isHighlighted 仍然會改變 UIControlState - 為什么?

[英]Overriding isHighlighted still changes UIControlState - why?

UIControl中,如果我重寫isHighlighted以設置私有_isHighlighted屬性,然后檢查控件的state以查看它是否包含.highlighted ,則狀態仍然准確地反映了更改。 請參閱下面的代碼。

我的問題是,這怎么可能? 我從不調用super.isHighlighted或操縱 state 屬性。 state是一個OptionSet ,它必須將.highlighted屬性插入到集合中,據我所知,如果我覆蓋該屬性,它不會或不應該發生。

我能想到的唯一其他解釋是state實際上是基於其他屬性(即isSelectedisEnabled等)的計算屬性。

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

我能想到的唯一其他解釋是狀態實際上是基於其他屬性(即 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

Quod erat 示范。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM