UIButton有普通、高亮、失能、選中四種狀態(tài),在公司項(xiàng)目開(kāi)發(fā)中,有時(shí)UI給按鈕的背景顏色值來(lái)區(qū)分普通和高亮狀態(tài),但是蘋果并沒(méi)有給我們提供設(shè)置普通和高亮狀態(tài)的背景顏色,我們可以利用KVO來(lái)實(shí)現(xiàn)按鈕普通狀態(tài)和高亮狀態(tài)的背景顏色,UIButton繼承于UIControl,UIControl有個(gè)highlighted屬性,我們只需要監(jiān)聽(tīng)這個(gè)屬性就能實(shí)現(xiàn)普通和高亮狀態(tài)下的背景顏色的切換。
1.首先,添加一個(gè)按鈕在界面上,我們先設(shè)置好普通和高亮狀態(tài)時(shí)的文字,還有圓角
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 40)];
[button setTitle:@"normal" forState:UIControlStateNormal];
[button setTitle:@"highlighted" forState:UIControlStateHighlighted];
[button setBackgroundColor:[UIColor redColor]];
button.layer.cornerRadius = 10.0f;
button.layer.masksToBounds = YES;
[self.view addSubview:button];
// 添加觀察者方法
[self addObserver:button];
2.添加觀察者
/**
* 添加觀察者
*
* @param button 需要設(shè)置的按鈕
*/
- (void)addObserver:(UIButton *)button {
[button addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew context:nil];
}
3.接下來(lái)就是實(shí)現(xiàn)觀察者方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
UIButton *button = (UIButton *)object;
if ([keyPath isEqualToString:@"highlighted"]) {
if (button.highlighted) {
[button setBackgroundColor:[UIColor blueColor]];
return;
}
[button setBackgroundColor:[UIColor redColor]];
}
}
這樣我們就能在不使用圖片的前提下,實(shí)現(xiàn)設(shè)置高亮和普通狀態(tài)下的背景顏色
看下具體的效果

button.gif
當(dāng)然,別忘了移除觀察者