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 |
未知 | 框架内部预留标识 |
至此,给按钮设置什么状态,怎么更改状态就直接参考上面的表吧。这些个未知情况,看后面有没有机缘发现了。
题外话
时间仓促,说的东西可能不全面,在你查看的过程中遇到什么问题,评论区给我留言,我会尽快回复
Swift-技巧(六)设置按钮状态并更改的更多相关文章
- iOS小技巧 - 为按钮设置不同状态下的背景色
我们知道直接在Storyboard中设置按钮的背景色是不能根据不同状态来更改的,那问题来了,如果我们需要在不同的状态下(比如按钮没有被按下或者被按下),使得按钮呈现不同的背景色怎么办? 比如上图左边是 ...
- Swift开发小技巧--TabBar中间按钮的添加方案
TabBar中间按钮的添加方案 之前做百思项目的时候,也有一个中间按钮,当时是重写的TabBar,这里介绍一个新的方法 给TabbarVC多添加添加一个控制器,这个控制器的作用仅仅是用来占位的,多了这 ...
- jQuery设置按钮被点击状态
js和jquery如何使按钮失效,很简单,只要设置disabled属性为true即为不可用状态即可 1.JS方法一: document.getElementByIdx("btn") ...
- iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态
iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态 在示例2-2中,设置按钮的标题和颜色时,需要对按钮的状态进行设置,表示按钮在某一状态下的标题和标题颜色是什么样子.例如,UICo ...
- iOS 11 导航栏 item 偏移问题 和 Swift 下 UIButton 设置 title、image 显示问题
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Qt设置按钮为圆形
通过Qt 的样式表实现圆形按钮,其也可以实现圆角按钮,当然也可以使用其他的方式,比如说,通过派生按钮类使用绘图事件,进行一个图形的绘制,或者是通过自定义一个类,通过信号与槽的机制与绘图事件的配合也能实 ...
- iOS MJRefresh设置MJRefreshStateNoMoreData状态图片
MJRefresh地址 // 代码地址: https://github.com/CoderMJLee/MJRefresh// 代码地址: http://code4app.com/ios/%E5%B ...
- MFC 使用位图按钮,并且设置按钮的鼠标悬停效果
系统环境:Windows 10软件环境:Visual C++ 2013 SP1本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果 在用MFC开发时,界面是比较不好开发的一块.VC中自带了CBitmap ...
- Bootstrap入门(六)按钮和图片
Bootstrap入门(六)按钮和图片 先引入本地的CSS文件 <link href="css/bootstrap.min.css" rel="styleshe ...
随机推荐
- 解决Vite-React项目中js使用jsx语法报错的问题
背景 在做存量项目接入Vite测试时发现,存量(老)项目中很多是直接在js中书写jsx语法,使用Vite启动时就会抛出一堆问题Failed to parse source. 不嫌麻烦可以跑个脚本批量修 ...
- JUC之Executor,ExecutorService接口,AbstractExecutorService类
java多线程的Executor中定义了一个execut方法,ExecutorService接口继承了Executor接口,并进行了功能的扩展组合,定义了shutdown,shutdownNow,su ...
- 分析你的第一个Android程序
目录 分析你的第一个Android程序 Android模式的项目结构 切换项目结构模式 Project模式的项目结构 .gradle和idea app build(没有发现这个文件夹) gradle ...
- Dapr + .NET Core实战(十四)虚拟机集群部署 mDNS + Consul
前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...
- 改善深层神经网络-week3编程题(Tensorflow 实现手势识别 )
TensorFlow Tutorial Initialize variables Start your own session Train algorithms Implement a Neural ...
- UltraSoft - Beta - Scrum Meeting 10
Date: May 26th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录Scrum Meeting Liuzh 前端 暂无 Kkkk 前端 前端增加了 ...
- 2021.8.17考试总结[NOIP42]
$\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ $\huge{取模不能比大小!}$ 有了打地鼠的前车之鉴,我深信树规板子是可以出现在联赛题里的. 所以T1十分钟码完直接溜了,后 ...
- Ubuntu virtualenv 创建 python2 虚拟环境 激活 退出
首先默认安装了virtualenv 创建python2虚拟环境 your-name@node-name:~/virtual_env$ virtualenv -p /usr/bin/python2 py ...
- 最后的OI(HAOI2020游记)
马上就省选了,怎么不得写点什么?要不然到最后或许就真的落得个白茫茫大地真干净的局面. 其实也不知道该说啥?我这一路走来,感觉挺赚的. 每一个OIer背后都有一个故事,所以,我有故事,你有酒吗? 依稀记 ...
- ST表 求 RMQ(区间最值)
RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...