带你深入理解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> 除开UIControlStateHighlighted、UIControlStateDisabled、UIControlStateSelected以外的其他情况,都是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*)touches withEvent:(UIEvent *)event{ self.button.selected = YES;}@end复制代码