码迷,mamicode.com
首页 > 移动开发 > 详细

【原创】(IOS开发)highlighted和selected两种按钮状态原理摸索分享

时间:2015-12-12 01:34:33      阅读:853      评论:0      收藏:0      [点我收藏+]

标签:

 

      先科普以下常识:简单来看,按钮有点击、非点击2个状态,点击时系统会自动调用设置按钮高亮状态的方法(setHighlighted);非点击时视为正常状态(normal)。我们可以根据需要给不同状态设置不同背景图片,苹果官方对按钮状态细致划分为3种:高亮(highlighted)、选中(selected)、普通(normal),如果编写代码时调用了方法(setSelected),按钮会呈选中状态(selected)。

 

3种按钮状态,苹果官方命名为:

UIControlStateNorma(正常)、UIControlStateHighlighted(高亮)、UIControlStateSelected(选中)

 

接下来将2张按钮背景图片作为讲解素材:

UIControlStateNorma 状态选用灰色图片TabBar

技术分享

技术分享

UIControlStateHighlighted 或 UIControlStateSelected 状态选用金色图片TabBarSel

技术分享

 

      再次强调下,按钮点击时,一定会调用系统方法(setHighlighted:),并显示为事先设置的高亮状态图片,如果之前没设置,默认显示效果为在原图片下加一层灰色。点击后只要没松开手,就会保持highlighted状态,松开手恢复显示normal状态。

现在看如下代码:

// 设置按钮图片背景

NSString  *name = [NSString  stringWithFormat:@"TabBar"];

[button  setBackgroundImage:[UIImage  imageNamed:name]   forState:UIControlStateNormal]; 

        

NSString  *selectedName = [NSString  stringWithFormat:@"TabBarSel" ];

[button  setBackgroundImage : [UIImage  imageNamed: selectedName]   forState : UIControlStateHighlighted];// 第a行

 

// 监听按钮点击

[button addTarget:self action:@selector(buttonClick:) forControlEvents: UIControlEventTouchDown]; // 第e行

 

// 点击按钮调用方法

- (void)buttonClick:(UIButton *)button

{

    button.selected = YES// 第b行

}

 

// 设置高亮状态方法

- (void)setHighlighted:(BOOL)highlighted

{

   [super setHighlighted:highlighted]// 第c行

}

 

// 设置选中状态方法

- (void)setSelected:(BOOL)selected

{

    [super setSelected:selected]// 第d行

}

 

代码讲解:

      贴出的代码是精简版,能传达清楚意思即可。对a、b、c、d、e各行做不同程度的修改,运行后点击按钮会看到不同的效果。

  1.  注释掉第b行,点击按钮不放,显示高亮状态金色图片,松开恢复正常状态的灰色图片。这点容易理解。
  2.  注释掉第b行,注释掉第c行,点击按钮,按钮无任何变化。因为[super setHighlighted:highlighted]是设置高亮状态,注释掉后,方法内并没有做任何事,所以不变。
  3.  不做任何修改,点击按钮,按钮在原图片上加一层灰色。虽然调用了(setSelected)方法,但因为没设置selected状态下背景图片,所以看到的只是变高亮的效果。
  4.  将第a行的UIControlStateHighlighted改为 UIControlStateSelected,点击时为原图片加一层灰色的高亮,松开手转换为选中状态的金色图片。如果想去掉高亮状态,注释掉第c行即可,点击直接变金色图片。

注意:如果把第e行UIControlEventTouchDown改成UIControlEventTouchUpInside,应用在上述4种情况时会显示效果会有一点差别,原因估计就在UIControlEventTouchDown是点击了就调用方法buttonClick:,而UIControlEventTouchUpInside是在松开手后才调用,具体效果大家可以自己试试。

【原创】(IOS开发)highlighted和selected两种按钮状态原理摸索分享

标签:

原文地址:http://www.cnblogs.com/xqry/p/5040604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!