Swift-技巧(六)設定按鈕狀態並更改

語言: CN / TW / HK

小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動

摘要

按鈕是一個寶藏控制元件,可以在設定的時候就對不同的狀態新增圖片、文字,甚至更改背景。在不同的展示場景中更改到不同的狀態顯示就好。恰恰是如何更改狀態著實讓我懵了一陣,所以記錄一下過程。如果沒有興趣瞭解過程,可以直接滑到底部,截圖表格收藏。

之前在處理一個按鈕控制元件,按鈕有可以點選和禁止點選兩個不同的狀態,因為這兩種狀態有不同的圖示,所以就想用 setImage(, for: ) 函式處理:

let btn = UIButton() btn.setImage(UIImage(named: "pic1"), for: .normal) btn.setImage(UIImage(named: "pic2"), for: .disabled)

設定完按鈕控制元件後,剩下的處理就是在需要顯示不同的狀態的地方設定它的狀態,剛好按鈕有 state 屬性,那麼當歡欣鼓舞的設定 btn.state = .disabled 時,就一臉懵:

state-error

報的編譯錯誤:說 state 屬性只可以讀,不可以寫,不死心的我追進去看一下原始碼:

var state: UIControl.State { get }

到這裡徹底懵了,我要更改按鈕狀態為 .disabled 還不行了?

凡事就怕聯想啊,我突然想到之前設定 按鈕的狀態為 .selected之後,就通過更改 .isSelectedtrue 或者 false 來達到按鈕更改狀態效果,那就聯想一下看,有沒有 .disabled

state-error2

這.......總不能可以設定,不能更改吧,要是這樣,開放這屬性就是為了玩嗎?不能死心,這條路走不通,換條路,看看 .disabled 的原始碼去。

state-error3

原來,竟然,出我意料。竟然用 isEnabled 來更改狀態。既然到這個地方,那就順手把按鈕的狀態和更改給總結一下:

| UIControl.state | How change? | 狀態解釋 | | ----------------- | ----------------------- | --------------------- | | normal | 以下屬性 Bool 值為都 false | 預設狀態,啟用但是沒有被選中或者被高亮狀態 | | highlighted | isHighlighted | 高亮 | | disabled | isEnabled | 禁用 | | selected | isSelected | 選中 | | focused | 未知 | 聚焦 | | application | 未知 | 控制元件的附加應用標識 | | reserved | 未知 | 框架內部預留標識 |

至此,給按鈕設定什麼狀態,怎麼更改狀態就直接參考上面的表吧。這些個未知情況,看後面有沒有機緣發現了。

題外話

時間倉促,說的的東西可能不全面,在你檢視的過程中遇到什麼問題,評論區給我留言,我會盡快回復