定义

@property(nonatomic,readonly) UIControlState state;                  // could be more than one state (e.g. disabled|selected). synthesized from other flags.@property(nonatomic,getter=isEnabled) BOOL enabled;                                  // default is YES. if NO, ignores touch events and subclasses may draw differently
@property(nonatomic,getter=isSelected) BOOL selected;                                // default is NO may be used by some subclasses or by application
@property(nonatomic,getter=isHighlighted) BOOL highlighted;                          // default is NO. this gets set/cleared automatically when touch enters/exits during tracking and cleared on up

state

typedef NS_OPTIONS(NSUInteger, UIControlState) {UIControlStateNormal       = 0,UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is setUIControlStateDisabled     = 1 << 1,UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focusUIControlStateApplication  = 0x00FF0000,              // additional flags available for application useUIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
};
state类型为UIControlState,bitmask形式保存状态,可同时保存多组状态

highlighted,enabled,selected

state的低3位保存highlighted,disabled,selected,从UIControlState定义中可以得出:
  • normal/highlighted保存在第0位,0表示normal,1表示highlighted
  • enabled/disabled保存在第1位,0表示enabled,1表示disabled
  • selected/deselected保存在第2位,0表示deselected,1表示selected

state和appearance(只考虑state低3位)

继承自UIControl的控件可以定制四种appearance,分别为default,highlighted,selected,disabled,对应state的低3位为:
  • 000(0):default(highlighted=0,disabled=0,selected=0)
  • 001(1):highlighted(highlighted=1,disabled=0,selected=0)
  • 010(2):disabled(highlighted=0,disabled=1,selected=0)
  • 100(4):selected(highlighted=0,disabled=0,selected=1)
继承自UIControl的控件可以定制四种appearance,但四种appearance都是optional定制,如果对应的appearance没有定制,控件显示default appearance
如果state低3位保存多组状态,UIControl控件appearance显示规律为:
highlighted=1
  • disabled=1,selected=0,011(3),appearance=highlighted
  • disabled=0,selected=1,101(5),appearance=default
  • disabled=1,selected=1,111(7),appearance=default
  • selected=1,disabled=1,111(7),appearance=default
disabled=1
  • highlighted=0,selected=1,110(6),appearance=default
  • highlighted=1,selected=0,010(2),appearance=disabled
  • highlighted=1,selected=1,110(6),appearance=default
  • selected=1,highlighted=1,110(6),appearance=default
selected=1
  • highlighted=1,disabled=0,101(5),appearance=default
  • highlighted=0,disabled=1,110(6),appearance=default
  • highlighted=1,disabled=1,111(7),appearance=default
  • disabled=1,highlighted=1,110(6),appearance=default
state设置总结:
  • state 000(0),highlighted,disabled,selected都未设置,此时设置其中任何1位,可正常设置
  • 已设置disabled情况下,设置highlighted无效(ignored)
state和appearance关系总结:
  • state至多包含1位1(000,001,010,100)时,appearance正常显示appearance
  • state包含2位或3位1时,只有011(3)时,appearance=highlighted,其余情况appearance=default
用代码表示:
@implementation UIControl//...- (void)setHighlighted:(BOOL)highlighted
{if(highlighted == YES && !(_state & UIControlStateDisabled)){_state |= UIControlStateHighlighted;}else{_state &= ~UIControlStateHighlighted;}
}- (BOOL)isHighlighted
{return _state & UIControlStateHighlighted;
}- (void)setEnabled:(BOOL)enabled
{if(enabled == YES){_state &= ~UIControlStateDisabled;}else{_state |= UIControlStateDisabled;}
}- (BOOL)isEnabled
{return !(state & UIControlStateDisabled)
}- (void)setSelected:(BOOL)selected
{if(selected == YES){_state |= UIControlStateSelected;}else{_state &= ~UIControlStateSelected;}
}- (BOOL)isSelected
{return _state & UIControlStateSelected;
}- (UIControlState)state
{return _state;
}- (void)appearance
{switch(_state & 0x7){case 0:_appearance = DefaultAppearance;break;case 1:_appearance = HighlightedAppearance;break;case 2:_appearance = DisabledAppearance;break;case 3:_appearance = HighlightedAppearance;break;case 4:_appearance = SelectedAppearance;break;default:_appearance = DefaultAppearance;break;}if(_appearance == nil){_appearance = DefaultAppearance;}
}//...@end

cocoa touch——UIControl——state,highlighted,enabled,selected相关推荐

  1. 什么是cocoa和cocoa Touch?iOS面试攻克篇(一)

    '写在前面的话' 这些是我对iOS面试时会碰到的问题的解决方法,整理出来分享给大家,有些错误不要 笑了,希望对大家有所帮助.大家有更好的解决办法也欢迎沟通交流. 一直以来都有写点儿东西的想法,就从笔记 ...

  2. 计算机有ssd为什么还启动慢,装了固态硬盘电脑开机,反应还是慢,知道为什么吗?...

    由于现在的固态硬盘越来也便宜,差不多2块钱就1个G,而且都说电脑装上固态硬盘(SSD)电脑速度有一个巨大的飞跃,速度大大的提升,买一个120G活240G的就足够装系统及常用软件了,能大大提升整机的性能 ...

  3. 你知道安卓的3D Touch吗?(Shortcut详解,你想知道的我都有)

    前因后果 苹果在iPhone 6s和iPhone 6s Plus开始新增了3D Touch,这个功能褒贬不一,但我觉得还是特别好用的,特别是在微信上付款.加好友.扫二维码,或是在支付宝上付款等等场景. ...

  4. 9.Matlab中的repmat,clock,rand以及seed,state,twister参数

    1.repmat  ------Replicate  and tile an array -------复制并且平铺函数 2. clock 3.rand中seed,state,以及twister参数 ...

  5. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)

    http://blog.csdn.net/totogo2010/article/details/8081253 Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. ...

  6. Touch panel DTS 分析(MSM8994平台,Atmel 芯片)

    Touch panel DTS 分析(MSM8994平台,Atmel 芯片) 在MSM8994平台下,Touch panel的DTS节点写在/kernel/arch/arm/boot/dts/qcom ...

  7. 苹果app,Touch Album 私密相册强制消费,勒索消费者,一周50元,app降级到1.4.2之前 可解决

    该APP经大家群力举报,已经下架了.所以现在这个教程对于还没降级的同志,已经没法用了.因为从Itunes中下载不到这个Touch Album的安装包了. 但是,还存在着一种方法:使用他人(A)已经下载 ...

  8. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

  9. 3226 元起,苹果 iPhone SE Plus 曝光:6.1 英寸屏幕,搭载 A14 芯片,支持 Touch ID

    IT之家1月21日消息 外媒 MSPoweruser 报道,在 2020 年,iPhone SE 二代的推出大受欢迎,但去年的 iPhone SE 2 最大的一个问题是采用 4.7 英寸显示屏,这对于 ...

最新文章

  1. 写单元测试应该注意什么
  2. 河马搞笑GIF动态图网站(http://gif.hemaj.com)上线,老司机快上车!
  3. 网站收录上不去估计是这几个方面出了问题
  4. 2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片
  5. [leetcode] 题型整理之图论
  6. notepad++正则表达式去掉关键字所在行
  7. flash遨游缓存问题
  8. C++----为什么不让用using namespace std
  9. [NLP]OpenNLP命名实体识别(NameFinder)的使用
  10. HelpDesk工作流多级,多任务流程(包含源代码和InfoPath模板)
  11. 新版“北京通”今天上线 一个APP可办650件事儿
  12. 两个月面试30+公司,我得到了这些经验教训
  13. 第2课计算机的发展教学反思,信息技术课教学反思2
  14. iOS 导入自定义字体不生效
  15. 利用Python网络爬虫实现对网易云音乐歌词爬取
  16. Pandas 数据预处理
  17. 基于ROS_Arduino室内移动机器人SLAM实验测试
  18. 狐言:王阳明心学、量子物理、心外无物的乱弹
  19. hadoop2.9 idea_Windows系统使用IntelliJ IDEA 搭建Hadoop的开发调试环境(一)
  20. Oracle 给某列前后添加后缀或者前缀

热门文章

  1. 信息学奥赛一本通:1178:成绩排序
  2. 放大镜功能怎么打开?打开电脑放大镜功能的方法
  3. ios开发者账号 APPID 需要回答密保问题来重新编辑手机号导致app无法更新终结篇
  4. 达人评测酷睿i5 12450h和锐龙R5 6600H选哪个
  5. js跳转(js跳转网页)
  6. FindWindow和FindWindowEx函数使用
  7. 输入学生期中成绩、期末成绩、平时成绩,按30%、50%、20%计算学生的综合成绩
  8. 2022性价比高的蓝牙耳机推荐,618值得买的蓝牙耳机推荐
  9. 红米note10pro和红米k30s至尊纪念版选哪个
  10. [good]基于labview的USB调试小助手