前言
一個(gè)朋友問(wèn)我過(guò)一個(gè)這樣的問(wèn)題,他在底部的tabBar上面加了一個(gè)控件,這個(gè)控件超出了底部的tabBar,超出的部分無(wú)法響應(yīng)事件,怎么辦?
相信大家應(yīng)該明白為什么不能響應(yīng)事件的原因,就是響應(yīng)者鏈條么,你父控件不能響應(yīng),系統(tǒng)就認(rèn)為你也不能響應(yīng),具體的內(nèi)容請(qǐng)看這篇博客
我這里自定義了一個(gè)tabBar,在里面重寫(xiě)了 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
方法,這個(gè)方法主要是用來(lái)檢查該觸摸點(diǎn)是否在該控件所在的矩形區(qū)域內(nèi),你只要在這個(gè)方法里讓超出的部分返回為YES,就可以了.
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
if ([super pointInside:point withEvent:event]) {
return [super pointInside:point withEvent:event];
}else{
CGRect rect = [self convertRect:self.plusButton.frame toView:self];
return CGRectContainsPoint(rect, point);
}
}
說(shuō)明:如果([super pointInside:point withEvent:event]
方法返回的是YES,我不做處理,只有當(dāng)這個(gè)方法返回為NO的時(shí)候,才去判斷是否在那個(gè)加號(hào)按鈕的范圍內(nèi),其中用到了frame轉(zhuǎn)換,在按鈕的范圍內(nèi)返回為YES,其他的返回為NO.
其他更詳細(xì)的代碼在這里