iOS自定義TableView的Cell點(diǎn)擊事件

公司同事遇到了一個問題向筆者求助:在UITableView的代理函數(shù)didSelectRowAtIndexPath中發(fā)現(xiàn)indexPath并不是實際點(diǎn)擊的row,難道是iOS系統(tǒng)出錯?經(jīng)過不斷調(diào)試并沒查出實際原因,后來筆者只好仿造一個Cell的點(diǎn)擊事件。

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

第一步:添加觸摸機(jī)制

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

第二步:判斷哪個cell

#pragma mark - 點(diǎn)擊事件
- (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];
    }
}

第三步:實現(xiàn)Cell點(diǎn)擊

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

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容