[BUG]UITapGestureRecognizer和UITableView的衝突(didSelectRowAtIndexPath無反應)

最近有個需求,是在UIView裏面添加一個子視圖UITableView,然後在UIView上添加了一個UITapGestureRecognizer,之後發現UITableView裏的cell點擊沒有反應,然後分別在UITapGestureRecognizer的事件和

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{}
分別打印,結果發現只執行了UITapGestureRecognizer的事件,而

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{}
根本沒有執行。

經過查詢資料發現解決方法:
1.首先設置UITapGestureRecognizer的代理
2.重寫- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
這個方法詢問delegate是否允許手勢接收者接收一個touch對象,返回YES,則允許對這個touch對象審覈,NO,則不允許。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    // 若點擊了tableViewCell,則不截獲Touch事件
    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
        return NO;
    }
    return  YES;
}


UITapGestureRecognizer類似同樣有衝突的手勢還有UILongPressGestureRecognizer和UIPanGestureRecognizer(cell左滑刪除)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章