天天看點

解決點選UITableViewCell時和自定義添加的手勢沖突的問題

問題重制:

自義定封裝了一個View,把View添加到Window上,在View上添加tableView,然後在View上添加輕拍手勢,但是問題來了,點選Cell時,總是響應手勢方法,不執行tableView:didSelectRowAtIndexPath:方法。

解決辦法:

1、給自定義的手勢添加代理

2、執行代理方法,判斷觸摸事件的View的類型,截獲所點選的視圖,并決定是否手勢繼續向下響應

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    else {
        return YES;
    }
}



                
或則


-  (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldReceiveTouch:(UITouch*)touch {

    if ([touch.view isKindOfClass:[UIScrollView class]]) {

       returnYES;

     }

    returnNO;

}

      

或者判斷點選的點是否在tableView内

// 判斷觸摸點的位置,根據位置決定點選手勢是否有效
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // 拿到觸摸點
    CGPoint point = [touch locationInView:self.bottomView];
    // 轉換坐标系
    CGPoint nPoint = [self.bottomView convertPoint:point toView:self.bottomView.tableView];
    // 判斷轉換坐标後的點的位置
    return  [self.bottomView.tableView pointInside:nPoint withEvent:nil] ? NO : YES;  
}           

繼續閱讀