公司同事遇到了一個問題向筆者求助:在UITableView的代理函數(shù)didSelectRowAtIndexPath中發(fā)現(xiàn)indexPath并不是實際點擊的row涮俄,難道是iOS系統(tǒng)出錯镀琉?經過不斷調試并沒查出實際原因抡驼,后來筆者只好仿造一個Cell的點擊事件坪圾。
思路很簡單键菱,就是給TableView添加一個UITapGestureRecognizer澡匪,然后在action中判斷是哪個Cell减江。
第一步:添加觸摸機制
// 用此方式替代TableView代理的didSelectRowAtIndexPath函數(shù)
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];
}
}
第三步:實現(xiàn)Cell點擊
-(void)m_tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// 邏輯處理
}
PS:UITableView的原生代理點擊事件(tableView:didSelectRowAtIndexPath:)就不需要實現(xiàn)了,自己定義一個第三步的函數(shù)就好淘太。