UIButton基本状态及各种叠加状态详解

带你深入理解UIButton的Normal状态,为什么有时候点击按钮时,本来应该显示为高亮的按钮却变成了Normal状态?


一、按钮的状态

1.UIControlStateHighlighted

 1> 【当按住按钮不松开】或者用代码【button.highlighted = YES】时就能达到这种状态
 2> 这种状态下的按钮【可以】接收点击事件,显示为【highlighted】状态下的文字颜色和图片
复制代码

2.UIControlStateDisabled

 1> 【button.enabled = NO】时就能达到这种状态
 2> 这种状态下的按钮【无法】接收点击事件,显示为【Disabled】状态下的文字颜色和图片
复制代码

3.UIControlStateSelected

 1> 【button.selected = YES】时就能达到这种状态
 2> 这种状态下的按钮【可以】接收点击事件,显示为【selected】状态下的文字颜色和图片
复制代码

4.UIControlStateNormal

   1> 除开UIControlStateHighlightedUIControlStateDisabledUIControlStateSelected
以外的其他情况,都是normal状态,包括以上几种状态的叠加状态都会【显示】为normal状态下的文字颜色和图片
   2> 这种状态下的按钮【可以】接收点击事件,但是如果是由【button.enabled = NO】状态和其它状态叠加则不可点击
复制代码
二、让按钮无法点击的2种方法

1> button.enabled = NO; *【会】进入UIControlStateDisabled状态,显示的图片,文字颜色改变

2> button.userInteractionEnabled = NO; *【不会】进入UIControlStateDisabled状态,继续保持当前状态


比如以下代码,

  • 运行后为Normal状态的红色按钮,
  • 点击屏幕让按钮进入【selected】状态,显示为蓝色,
  • 再点击按钮本身不松开,按钮会再进入【highlighted】状态,本来应该显示为绿色,但是却发现按钮变成了红色(Normal状态). 就是因为【selected】状态和【highlighted】状态两种状态叠加后就变成了Normal状态.

#import "ViewController.h"
#import "MYButton.h"

@interface ViewController ()
/** 按钮 */
@property (nonatomic, weak) MYButton *button;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    MYButton *button = [[MYButton alloc] init];
    [button setTitle:@"我是按钮" forState:UIControlStateNormal];
    button.frame = CGRectMake(100, 100, 100, 30);
    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    self.button = button;
    
    // 文字颜色
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted];
    [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected];
    [button setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];
}

- (void)buttonClick {
    NSLog(@"%s", __func__);
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    self.button.selected = YES;
}
@end
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值