美文网首页程序员
UIButton 状态小结

UIButton 状态小结

作者: 莫云溪 | 来源:发表于2019-10-07 15:56 被阅读0次

案例

我们先从一个问题说起,小明同学接到产品的一个新需求:实现一个 UIButton,要求在 normal、selected、highlighted 三种状态下展示不同文案。这简直太简单了,小明同学1分钟不到就实现了,关键代码如下:

[button setTitle:@"normal" forState:UIControlStateNormal];
[button setTitle:@"highlighted" forState:UIControlStateHighlighted];
[button setTitle:@"selected" forState:UIControlStateSelected];

这段代码有什么问题吗?

的确有问题!当 button 状态为 selected 时,点击按钮,文案展示 normal,当前状态应该是 UIControlStateHighlighted,怎么展示了 UIControlStateNormal 的文案?

问题分析

UIButton 有5种状态,分别是:default(normal), highlighted, focused, selected, disabled,通过属性 state 可以拿到当前状态值 UIControlState,定义如下:

@property(nonatomic,readonly) UIControlState state;                  // could be more than one state (e.g. disabled|selected). synthesized from other flags.

typedef NS_OPTIONS(NSUInteger, UIControlState) {
    UIControlStateNormal       = 0,
    UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
    UIControlStateDisabled     = 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 focus
};

看到位运算我们就可以猜到这个状态可以组合,而且有句很关键的注释:

could be more than one state (e.g. disabled|selected). synthesized from other flags.
state 不是单独的状态,可以是多种状态的混合。

我们在回到上面的小明同学遇到的问题,当 button 状态为 selected 时,点击按钮,按钮此时的状态其实是 UIControlStateHighlighted | UIControlStateSelected。在官方文档中,我们可以看到这么一句话:

If a title is not specified for a state, the default behavior is to use the title associated with the UIControlStateNormal state

也就是说小明同学其实漏设置了一种状态,然后系统展示了按钮的默认状态 UIControlStateNormal,按钮状态并不是是 UIControlStateNormal

小结

1、UIControlState 是个组合状态,在 setTitle:forState:setImage:forState: 时,如果需要自定义 UIControlStateSelected 状态,一定要注意自定义 UIControlStateHighlighted | UIControlStateSelected
2、如果按钮的当前状态没有自定义,使用 UIControlStateNormal 定义的值。

相关文章

  • UIButton 状态小结

    案例 我们先从一个问题说起,小明同学接到产品的一个新需求:实现一个 UIButton,要求在 normal、sel...

  • UIButton的背景色与状态。

    在使用UIButton是,由于UIButton具有多种状态,如下: 但是UIButton虽然提供了各种状态下设置图...

  • 第三天总结

    UIButton UIButton->UIControl->UIView 状态normal(普通状态) 默认情况h...

  • UIButton小结

    前言 本来没有打算写这篇文章的, 主要是因为在工作中遇到一些同事再用 有UIButton的时候, 有些很基本的,系...

  • 导致UIButton半透明的原因

    UIButton的userInteractionEnabled设置为No的时候会使UIButton变成半透明状态

  • UI控件

    UIButton 1.注意UIbutton的selected的状态; 设置的这个状态,如果后面改变button的s...

  • 04-UIButton详细属性介绍

    1.UIButton状态: 2.UIButton类型 3.UIButton常用属性** 给按钮设置文字时,苹果文档...

  • 苹果UI基础-Day03

    UIButton 按钮的作用可以和用户交互既能显示图片,也能显示文字 UIButton的状态normal(不同状态...

  • UIButton常用小结

    1.UIbutton基础知识 第一次发这种东西(以后还会常发) ,如果你觉得有什么不妥 ,你可以 OK,先来一段官...

  • 对UIButton 的操作(彩票案例)

    可以实现的效果:1.取消UIButton的高亮状态2.缩小UIButton的响应区域3.对UIButton中的UI...

网友评论

    本文标题:UIButton 状态小结

    本文链接:https://www.haomeiwen.com/subject/bpempctx.html