帶你深入理解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<UITouch *> *)touches withEvent:(UIEvent *)event
{
self.button.selected = YES;
}
@end
複製程式碼