公司同事遇到了一個問題向筆者求助:在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ù)就好。