iOS 探讨之 UIButton State 神坑 - Go语言中文社区

iOS 探讨之 UIButton State 神坑


简述

对于一些平常不太关注的事情来说,我们认为其的发生是理所当然,当问题蹦出后,“我靠( ‵o′)凸,按道理不应该这样啊 ~ ”  随之而出。

这次,我就被 UIButton 的 State 狠狠调戏了一番。

 

探讨

初次认知 UIButton 的时候我就会被其的各种状态折磨得头昏脑涨,后来随着见面次数的增加,慢慢了解到其的状态实际上是位的枚举集合。

那么,首先我们来瞜一眼苹果官方DOC。

Swift 版本 UIControl (UIButton直接父类) 的 State

 

从这个DOC中,我们可以认知到:

1 控件的状态是一个集合 (也就是说 可能同时存在  selected | disabled 的情况)

2 每一个状态对应一个 Int 值,可以通过 Int 值来反推集合内部组成

3 iOS 9以后 又添加了几种枚举 (逻辑更加复杂了,我们暂时不考虑它们)

 

Swift 版本 DOC 内部介绍并不是那么的完整,不过我依稀记得 OC 版本是有介绍的,让我们来欣赏一下 OC 版本DOC。

Objective-C 版本 UIControl (UIButton直接父类) 的 State

 

从这个DOC中,我们还可以认知到:

1 Selected     状态是存储在左起第三位

2 Disabled     状态是存储在左起第二位

3 Highlighted 状态是存储在左起第一位

4 Normal        状态是一种原始版本(对照版)

 

为了更直观认知上面的状态,我用了 storyboard 进行直观实验三种状态(Highlighted, Selected, Disabled)混合情况下所对应的真实样貌

1 通过右侧属性面板的设置,我设置了八组对照试验

   (所有按钮的文字属性设置相同 (Default 为 “Normal”, Highlight 为 “Highlighted”, Selected 为 “Selected”, Disabled 为 “Disabled”))

2 所得出的数据表格

从上面我们可以看出:

1 当状态相互矛盾的时候,UIControl 控件会强制将自己的状态置为 Default (Normal)

2 当 Enable 关闭的时候,UIControl 控件会将 Highlight 强制置为关闭状态

3 真实的 State 是由多个状态组合而成

4 四种正常逻辑的试验对应着 Normal、Selected、Highlighted、Disabled 四种状态

 

延伸

1 如何处理这些逻辑上说不通的场景

单独给这些场景设置业务上要求的样式即可,如下方我们给 .selected | .disabled 设置内容

 

2 Swift 版集合操作符

union                                     并集                           A∪B

intersection                           交集                           A∩B

symmetricDifference             对称差集                    A△B={x|x∈A∪B, x∉A∩B}

 

引用

https://www.jianshu.com/p/3d8c9f7d2fa5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://www.jianshu.com/p/e87096da5512

https://baike.baidu.com/item/%E5%AF%B9%E7%A7%B0%E5%B7%AE%E9%9B%86/1739582

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yanglei3kyou/article/details/89710373
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-09-05 17:55:45
  • 阅读 ( 1587 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢