Swift-技巧(六)設定按鈕狀態並更改
小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動
摘要
按鈕是一個寶藏控制元件,可以在設定的時候就對不同的狀態新增圖片、文字,甚至更改背景。在不同的展示場景中更改到不同的狀態顯示就好。恰恰是如何更改狀態著實讓我懵了一陣,所以記錄一下過程。如果沒有興趣瞭解過程,可以直接滑到底部,截圖表格收藏。
之前在處理一個按鈕控制元件,按鈕有可以點選和禁止點選兩個不同的狀態,因為這兩種狀態有不同的圖示,所以就想用 setImage(, for: )
函式處理:
let btn = UIButton()
btn.setImage(UIImage(named: "pic1"), for: .normal)
btn.setImage(UIImage(named: "pic2"), for: .disabled)
設定完按鈕控制元件後,剩下的處理就是在需要顯示不同的狀態的地方設定它的狀態,剛好按鈕有 state
屬性,那麼當歡欣鼓舞的設定 btn.state = .disabled
時,就一臉懵:
報的編譯錯誤:說 state
屬性只可以讀,不可以寫,不死心的我追進去看一下原始碼:
var state: UIControl.State { get }
到這裡徹底懵了,我要更改按鈕狀態為 .disabled
還不行了?
凡事就怕聯想啊,我突然想到之前設定 按鈕的狀態為 .selected
之後,就通過更改 .isSelected
的 true
或者 false
來達到按鈕更改狀態效果,那就聯想一下看,有沒有 .disabled
?
這.......總不能可以設定,不能更改吧,要是這樣,開放這屬性就是為了玩嗎?不能死心,這條路走不通,換條路,看看 .disabled
的原始碼去。
原來,竟然,出我意料。竟然用 isEnabled
來更改狀態。既然到這個地方,那就順手把按鈕的狀態和更改給總結一下:
| UIControl.state
| How change? | 狀態解釋 |
| ----------------- | ----------------------- | --------------------- |
| normal
| 以下屬性 Bool
值為都 false
| 預設狀態,啟用但是沒有被選中或者被高亮狀態 |
| highlighted
| isHighlighted
| 高亮 |
| disabled
| isEnabled
| 禁用 |
| selected
| isSelected
| 選中 |
| focused
| 未知 | 聚焦 |
| application
| 未知 | 控制元件的附加應用標識 |
| reserved
| 未知 | 框架內部預留標識 |
至此,給按鈕設定什麼狀態,怎麼更改狀態就直接參考上面的表吧。這些個未知情況,看後面有沒有機緣發現了。
題外話
時間倉促,說的的東西可能不全面,在你檢視的過程中遇到什麼問題,評論區給我留言,我會盡快回復
- 設計模式(三)生成器模式
- 設計模式(二)抽象工廠模式
- 設計模式(一)工廠方法
- 資料結構與演算法-基礎(十一)AVL 樹
- Swift-Framework(二)效能統計
- 資料結構與演算法-基礎(九)二叉搜尋樹
- 資料結構與演算法-基礎(八)遍歷二叉樹
- 資料結構與演算法-基礎(七)完全二叉樹
- 資料結構與演算法-基礎(六)二叉樹基礎
- 資料結構與演算法-基礎(五)佇列(Qeque)
- 資料結構與演算法-基礎(四)棧(Stack)
- 資料結構與演算法-基礎(三)- 迴圈連結串列(補充)
- 資料結構與演算法-基礎(二)單向連結串列
- iOS-啟動專案(二)引入第三方庫
- iOS-啟動專案(一)設定 rootViewController
- Alamofire-5.0.0 以上報錯
- Swift-技巧(十一)重寫運算子
- Swift-技巧(九)CGImage To CVPixelBuffer
- Swift-技巧(八)CVPixelBuffer To CGImage
- Swift-技巧(七)重識 Array