摘要

按钮是一个宝藏控件,可以在设置的时候就对不同的状态添加图片、文本,甚至更改背景。在不同的展示场景中更改到不同的状态显示就好。恰恰是如何更改状态着实让我懵了一阵,所以记录一下过程。如果没有兴趣了解过程,可以直接滑到底部,截图表格收藏。

之前在处理一个按钮控件,按钮有可以点击和禁止点击两个不同的状态,因为这两种状态有不同的图标,所以就想用 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-技巧(六)设置按钮状态并更改的更多相关文章

  1. iOS小技巧 - 为按钮设置不同状态下的背景色

    我们知道直接在Storyboard中设置按钮的背景色是不能根据不同状态来更改的,那问题来了,如果我们需要在不同的状态下(比如按钮没有被按下或者被按下),使得按钮呈现不同的背景色怎么办? 比如上图左边是 ...

  2. Swift开发小技巧--TabBar中间按钮的添加方案

    TabBar中间按钮的添加方案 之前做百思项目的时候,也有一个中间按钮,当时是重写的TabBar,这里介绍一个新的方法 给TabbarVC多添加添加一个控制器,这个控制器的作用仅仅是用来占位的,多了这 ...

  3. jQuery设置按钮被点击状态

    js和jquery如何使按钮失效,很简单,只要设置disabled属性为true即为不可用状态即可 1.JS方法一: document.getElementByIdx("btn") ...

  4. iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态

    iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态 在示例2-2中,设置按钮的标题和颜色时,需要对按钮的状态进行设置,表示按钮在某一状态下的标题和标题颜色是什么样子.例如,UICo ...

  5. 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 ...

  6. Qt设置按钮为圆形

    通过Qt 的样式表实现圆形按钮,其也可以实现圆角按钮,当然也可以使用其他的方式,比如说,通过派生按钮类使用绘图事件,进行一个图形的绘制,或者是通过自定义一个类,通过信号与槽的机制与绘图事件的配合也能实 ...

  7. iOS MJRefresh设置MJRefreshStateNoMoreData状态图片

    MJRefresh地址 //  代码地址: https://github.com/CoderMJLee/MJRefresh//  代码地址: http://code4app.com/ios/%E5%B ...

  8. MFC 使用位图按钮,并且设置按钮的鼠标悬停效果

    系统环境:Windows 10软件环境:Visual C++ 2013 SP1本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果 在用MFC开发时,界面是比较不好开发的一块.VC中自带了CBitmap ...

  9. Bootstrap入门(六)按钮和图片

    Bootstrap入门(六)按钮和图片   先引入本地的CSS文件 <link href="css/bootstrap.min.css" rel="styleshe ...

随机推荐

  1. Android 开发进程 0.35 升级编译版本Android12

    Android12升级 工作需要升级到编译版本31 在这里记录一下遇到的问题. 错误:Manifest merger failedManifest merger failed 这个问题通常搜到的答案是 ...

  2. 图数据库Neo4j的基本使用及与SpringBoot集成

    Neo4j 官网地址:https://neo4j.com/ 下载地址:https://neo4j.com/download-center/#community 官方入门文档:https://neo4j ...

  3. 洛谷4366——最短路(dijkstra,思维,异或)

    题目大意 给定一个n个点,m条边的图,每条边有边权,而每个点\(i\)也可以直接到达\(j\),代价是\(i\ xor\ j\),给定一个S和T,求S到T的最小代价 其中\(n\le100000,m\ ...

  4. js 面向对象 动态添加标签

    有点逻辑 上代码 thml布局 点击查看代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. python中列表和元组的区别

    列表(list)特点: 1.可变类型且有序的,有索引值. 元组特点: 1.不可变类型且有序的,通过下标索引值访问 2.元组里面只有一个元素的时候该元组类型就是这个元素的类型.例如:t=(1) t的类型 ...

  6. Ubuntu安装 配置GCC和Vim

    VMware14.0和Ubuntu镜像安装 https://mp.weixin.qq.com/s/045wrbdv92PkUQn2abddvA 适应屏幕设置 按照下列流程检查虚拟机设置 查看 -> ...

  7. RPAaaS是什么?为何能够推进RPA人人可用?

    RPAaaS是什么?为何能够推进RPA人人可用? 助力中小企业快速实现自动化,RPAaaS加速"RPA人人可用"时代到来 相对传统RPA拥有更多优势,PRAaaS为RPA行业带来更 ...

  8. FastAPI 学习之路(四十六)WebSockets(二)

    上一篇文章,我们分享了WebSockets一些入门的,我们这节课,在原来的基础上,对于讲解的进行一个演示.我们最后分享了依赖token等.首先我们对上次的代码进行调整. 我们之前分享FastAPI 学 ...

  9. 第四次Scrum Metting

    日期:2021年4月29日 会议主要内容概述:交代近两日工作,进一步细化上次讨论细节,代码合并. 一.进度情况## 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 ...

  10. Seata的一些概念

    Seata的一些概念 一.什么是seata 二.AT模式的介绍 1.前提条件 2.整体机制 3.读写隔离的实现 1.写隔离 2.读隔离 三.事务分组 1.事务分组是什么? 2.通过事务分组如何找到后端 ...