摘要
按钮是一个宝藏控件,可以在设置的时候就对不同的状态添加图片、文本,甚至更改背景。在不同的展示场景中更改到不同的状态显示就好。恰恰是如何更改状态着实让我懵了一阵,所以记录一下过程。如果没有兴趣了解过程,可以直接滑到底部,截图表格收藏。
之前在处理一个按钮控件,按钮有可以点击和禁止点击两个不同的状态,因为这两种状态有不同的图标,所以就想用 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 |
未知 | 框架内部预留标识 |
至此,给按钮设置什么状态,怎么更改状态就直接参考上面的表吧。这些个未知情况,看后面有没有机缘发现了。
题外话
时间仓促,说的东西可能不全面,在你查看的过程中遇到什么问题,评论区给我留言,我会尽快回复