在屏幕的底部放了一排按鈕做鍵盤的時(shí)候改含,遇到了一個(gè)高亮狀態(tài)的顯示問題。屏幕底部按鈕在模擬器上高亮狀態(tài)正常民泵,在真機(jī)上會(huì)延遲出現(xiàn)癣丧,但是觸摸事件又能夠正常響應(yīng)。搜索一番發(fā)現(xiàn)原因栈妆,是系統(tǒng)先識(shí)別成通知中心的滑出事件胁编,導(dǎo)致按鈕的高亮狀態(tài)顯示有延遲,需要長按一段事件才能夠正常出現(xiàn)鳞尔。
解決方法
- 通過繼承UIButton嬉橙,重寫B(tài)utton的點(diǎn)擊判斷,可以在判斷按鈕內(nèi)的時(shí)候立刻顯示高亮狀態(tài)
/**
* 繼承自UIButton寥假,重寫 pointInside:withEvent: 方法
*/
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL inside = [super pointInside:point withEvent:event];
if (inside && !self.isHighlighted && event.type == UIEventTypeTouches){
self.highlighted = YES;
}
return inside;
}
- 通過實(shí)踐發(fā)現(xiàn)市框,這樣設(shè)置確實(shí)能夠在屏幕底部正常使用按鈕的高亮狀態(tài),但是當(dāng)確實(shí)要喚出系統(tǒng)的通知中心的時(shí)候糕韧,按鈕不能夠取消它的高亮狀態(tài)枫振,結(jié)果就是底部按鈕會(huì)停留在高亮狀態(tài)下,重新點(diǎn)擊一次才能夠取消萤彩。解決方法是給按鈕添加通知的監(jiān)聽粪滤,當(dāng)檢測(cè)到系統(tǒng)進(jìn)入通知中心的時(shí)候進(jìn)行取消按鈕高亮狀態(tài)。完整的代碼如下
// CustomButton 繼承自UIButton
#import "CustomButton.h"
@implementation CustomButton
// 重寫 initWithFrame: 方法雀扶;如果項(xiàng)目中使用到的按鈕是通過xib生成的杖小,則此處重寫 awakeFromNib: 方法
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) { // 給按鈕添加通知監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(unHighlight) name:UIApplicationWillResignActiveNotification object:nil];
}
return self;
}
- (void)dealloc { // 移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL inside = [super pointInside:point withEvent:event];
if (inside && !self.isHighlighted && event.type == UIEventTypeTouches){
self.highlighted = YES;
}
return inside;
}
- (void)unHighlight {
self.highlighted = false;
}
@end