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:)就不需要实现了,自己定义一个第三步的函数就好。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容