iOS 探討之 UIButton State 神坑

簡述

對於一些平常不太關注的事情來說,我們認爲其的發生是理所當然,當問題蹦出後,“我靠( ‵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}

 

引用

https://www.jianshu.com/p/3d8c9f7d2fa5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://www.jianshu.com/p/e87096da5512

https://baike.baidu.com/item/%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86/1739582

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章