美文网首页iOS那些坑
关于UIButton的highlightedState

关于UIButton的highlightedState

作者: zgsddzwj | 来源:发表于2017-11-15 14:53 被阅读2次

    有这样一个需求,一个按钮,选中时展示一个image,未选中时展示另外一个image。于是我们开开心心的写了下面一段代码:

        [followBtn setImage:_IMAGE(@"icStar") forState:UIControlStateNormal];
        [followBtn setImage:_IMAGE(@"icStarSelected") forState:UIControlStateSelected];
    

    然后button点击后改变button的selected状态。
    点击,运行。
    效果是达到了,但是总感觉怪怪的。Normal和Selected变化的过程中会闪一下别的图案。
    于是,我们想起来,有一个highlightedState。好吧,给highlitedState也设置个图片吧。

        [followBtn setImage:_IMAGE(@"icStar") forState:UIControlStateHighlighted];
    

    等等。好像也不对啊。

    这样设置后,按钮从normal变为selected的过程看起来似乎行得通了,但是,从selected再变回normal的过程还是会出现那个该死的hightLighted状态。

    感到奇怪吧?我们明明已经设置了hightLighted状态下的图片,怎么回来的路行不通呢? 有没有可能从selected状态变回normal状态这个过程经历的并不是hightLighted状态,而是其他什么状态呢?

    没错,这个状态就是UIControlStateSelected | UIControlStateHighlighted,我们可以理解成选中时候的高亮状态。

    于是我们的代码变成了这样:

        [followBtn setImage:_IMAGE(@"icStar") forState:UIControlStateNormal];
        [followBtn setImage:_IMAGE(@"icStar") forState:UIControlStateHighlighted];
        [followBtn setImage:_IMAGE(@"icStarSelected") forState:UIControlStateSelected];
        [followBtn setImage:_IMAGE(@"icStarSelected") forState:UIControlStateSelected | UIControlStateHighlighted];
    

    再次点击运行。大功告成,normal和selected状态完美切换。

    其实,我们可以点击进入button的state查看,它是一个BitMask:

    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
        UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use
        UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
    };
    
    

    我们可以两两组合。分别得出按钮的不同的状态。这样就可以分别设置按钮不同状态时候的图片啦。
    本人QQ:297959735 邮箱:zgsddzwj@163.com,欢迎提意见。

    相关文章

      网友评论

        本文标题:关于UIButton的highlightedState

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