公司同事遇到了一個問題向筆者求助:在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:)就不需要實現了,自己定義一個第三步的函數就好。