簡述
對於一些平常不太關注的事情來說,我們認爲其的發生是理所當然,當問題蹦出後,“我靠( ‵o′)凸,按道理不應該這樣啊 ~ ” 隨之而出。
這次,我就被 UIButton 的 State 狠狠調戲了一番。
探討
初次認知 UIButton 的時候我就會被其的各種狀態折磨得頭昏腦漲,後來隨着見面次數的增加,慢慢了解到其的狀態實際上是位的枚舉集合。
那麼,首先我們來瞜一眼蘋果官方DOC。
Swift 版本 UIControl (UIButton直接父類) 的 State
從這個DOC中,我們可以認知到:
1 控件的狀態是一個集合 (也就是說 可能同時存在 selected | disabled 的情況)
2 每一個狀態對應一個 Int 值,可以通過 Int 值來反推集合內部組成
3 iOS 9以後 又添加了幾種枚舉 (邏輯更加複雜了,我們暫時不考慮它們)
Swift 版本 DOC 內部介紹並不是那麼的完整,不過我依稀記得 OC 版本是有介紹的,讓我們來欣賞一下 OC 版本DOC。
Objective-C 版本 UIControl (UIButton直接父類) 的 State
從這個DOC中,我們還可以認知到:
1 Selected 狀態是存儲在左起第三位
2 Disabled 狀態是存儲在左起第二位
3 Highlighted 狀態是存儲在左起第一位
4 Normal 狀態是一種原始版本(對照版)
爲了更直觀認知上面的狀態,我用了 storyboard 進行直觀實驗三種狀態(Highlighted, Selected, Disabled)混合情況下所對應的真實樣貌
1 通過右側屬性面板的設置,我設置了八組對照試驗
(所有按鈕的文字屬性設置相同 (Default 爲 “Normal”, Highlight 爲 “Highlighted”, Selected 爲 “Selected”, Disabled 爲 “Disabled”))
2 所得出的數據表格
從上面我們可以看出:
1 當狀態相互矛盾的時候,UIControl 控件會強制將自己的狀態置爲 Default (Normal)
2 當 Enable 關閉的時候,UIControl 控件會將 Highlight 強制置爲關閉狀態
3 真實的 State 是由多個狀態組合而成
4 四種正常邏輯的試驗對應着 Normal、Selected、Highlighted、Disabled 四種狀態
延伸
1 如何處理這些邏輯上說不通的場景
單獨給這些場景設置業務上要求的樣式即可,如下方我們給 .selected | .disabled 設置內容
2 Swift 版集合操作符
union 並集 A∪B
intersection 交集 A∩B
symmetricDifference 對稱差集 A△B={x|x∈A∪B, x∉A∩B}
引用
2 https://www.jianshu.com/p/e87096da5512
3 https://baike.baidu.com/item/%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86/1739582