Comportamiento extraño del método UITableView "indexPathForRowAtPoint:"

Como se muestra en el siguiente código, cuando la vista de tabla se estira (nunca se desplaza hacia arriba), siempre se NSLog(@"tap is not on the tableview cell") ( ya que pensé que la ruta de índice siempre será nula ). Pero cuando toco el avatar en el encabezado de la sección con el número de sección mayor que 2, el NSLog no recibe una llamada. Es extraño, ¿alguien sabe qué está pasando aquí?

 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { ... UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; tapGesture.numberOfTapsRequinetworking = 1; [avatar addGestureRecognizer:tapGesture]; //avatar is UIImageView and the user interaction is enabled. [headerView addSubview: aMessageAvatar]; return headerView; ... } -(void)handleTapGesture:(UITapGestureRecognizer *)sender { CGPoint point = [sender locationInView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point]; if (!indexPath) { NSLog(@"tap is not on the tableview cell"); } } 

Su location de toque es la location en el encabezado, no una celda, por lo que nunca coincidiría con una celda indexPath .

Probablemente podría configurar la tag para la vista de avatar como el número de sección en viewForHeaderInSection y luego recuperar el número de sección en handleTapGesture través de sender.view.tag . Por ejemplo:

 -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { ... UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)]; tapGesture.numberOfTapsRequinetworking = 1; avatar.tag = section; // save the section number in the tag avatar.userInteractionEnabled = YES; // and make sure to enable touches [avatar addGestureRecognizer:tapGesture]; //avatar is UIImageView and the user interaction is enabled. [headerView addSubview: aMessageAvatar]; return headerView; ... } -(void)handleTapGesture:(UITapGestureRecognizer *)sender { NSInteger section = sender.view.tag; NSLog(@"In section %d", section); }