首先添加UIGestureRecognizerDelegate協(xié)議凰慈,然后把 Tap手勢識別對象設(shè)置代理self,然后實現(xiàn)如下代碼:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIButton class]]){
return NO;
}
// 若為UITableViewCellContentView(即點擊了tableViewCell)娃循,則不截獲Touch事件
if?([NSStringFromClass([touch.view?class])?isEqualToString:@"UITableViewCellContentView"])?{
return?NO;
}
return??YES;
}
兩個控件之間的手勢沖突
我在一個橫向滾動的scrollview里面加了一個豎向滾動的tableview鹿驼,這時如果實現(xiàn)了scrollview的代理方法卻沒有區(qū)分scrollview和tableview,這時候tableview的滾動會發(fā)生混亂药版。解決方法是在didScroll代理方法里區(qū)分這兩個。
#pragma mark - scrollView delegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if ([scrollView isKindOfClass:[UITableView class]]) {
// NSLog(@"------是列表---");
}
else {
// NSLog(@"------是滾動試圖----");
}
}
UIScrollView和子視圖TableView的cell右滑刪除沖突
橫向滾動的scrollview里面有一個子視圖tableview喻犁,tableview的cell右右滑沖突槽片,除非手指激活tracking停留一會兒,否則無法激活右滑刪除肢础。
解決辦法類似上面的还栓,scrollview的左右滑依舊是由UIPanGesturerRecognizer控制的,但是該手勢的代理無法更改
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
//NSLog(@"手勢觸發(fā)的類=%@",NSStringFromClass([touch.view class]));
// 若為UITableViewCellContentView(即點擊了tableViewCell)传轰,則不截獲Touch事件
if ([NSStringFromClass([touch.view class])isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 若為UITableViewCellContentView(即點擊了tableViewCell)剩盒,則不截獲Touch事件
if ([NSStringFromClass([gestureRecognizer.view class])isEqualToString:@"UITableViewCellContentView"]) {
return NO;
}
return YES;
}