iOS手勢與tableView點(diǎn)擊事件沖突
問題描述:
當(dāng)我們把一個(gè)tableView添加到一個(gè)View上织盼,而該View又有其他點(diǎn)擊手勢,這是會(huì)出現(xiàn)手勢的沖突——點(diǎn)擊cell響應(yīng)的是View的手勢悔政,而不是我們想要的cell的 didSelectRowAtIndexPath方法延旧。
解決思路:
給view的點(diǎn)擊手勢設(shè)置代理,在gestureRecognizer : shouldReceiveTouch:方法中做判斷迁沫,返回yes表示該手勢有效,返回NO表示該手勢無效近弟,當(dāng)點(diǎn)擊cell時(shí)讓View的點(diǎn)擊手勢無效,這時(shí)celldidSelectRowAtIndexPath方法就會(huì)有效祷愉。
解決辦法:
方法一:判斷點(diǎn)擊的點(diǎn)是否在tableView內(nèi)
//判斷觸摸點(diǎn)的位置二鳄,根據(jù)位置決定點(diǎn)擊手勢是否有效
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
//拿到觸摸點(diǎn)
CGPoint point = [touch locationInView:self.bottomView];
//轉(zhuǎn)換坐標(biāo)系
CGPoint nPoint = [self.bottomView convertPoint:point toView:self.bottomView.tableView];
//判斷轉(zhuǎn)換坐標(biāo)后的點(diǎn)的位置
return? [self.bottomView.tableView pointInside:nPoint withEvent:nil] ? NO : YES;
}
方法二: 判斷觸摸事件的view的類型
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}else {
return YES;
}