iOS自定義TableView的Cell點擊事件

公司同事遇到了一個問題向筆者求助:在UITableView的代理函數didSelectRowAtIndexPath中發現indexPath并不是實際點擊的row,難道是iOS系統出錯?經過不斷調試并沒查出實際原因,后來筆者只好仿造一個Cell的點擊事件。

思路很簡單,就是給TableView添加一個UITapGestureRecognizer,然后在action中判斷是哪個Cell。

第一步:添加觸摸機制

// 用此方式替代TableView代理的didSelectRowAtIndexPath函數
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myTableViewClick:)];
[self.myTableView addGestureRecognizer:tapGesture];

第二步:判斷哪個cell

#pragma mark - 點擊事件
- (void)myTableViewClick:(UIGestureRecognizer *)gestureRecognizer {
    CGPoint point = [gestureRecognizer locationInView:self.myTableView];
    NSIndexPath *indexpath = [self.myTableView indexPathForRowAtPoint:point];
    if ([self respondsToSelector:@selector(m_tableView:didSelectRowAtIndexPath:)]) {
        [self m_tableView:self.myTableView didSelectRowAtIndexPath:indexpath];
    }
}

第三步:實現Cell點擊

-(void)m_tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // 邏輯處理
}

PS:UITableView的原生代理點擊事件(tableView:didSelectRowAtIndexPath:)就不需要實現了,自己定義一個第三步的函數就好。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容