usando el gesto de toque para seleccionar la fila

Quiero hacer clic en cada celda para activar un push segue pero como el view controller siempre está en modo de edición, no puedo hacer clic en las celdas. En el editing mode , he ampliado el reorder controller para cubrir toda la cell y luego lo he hecho invisible para que puedas arrastrar para reorderar la tableview de tableview desde cualquier lugar de la celda, así que cuando hago clic en las celdas en el modo de edición, estoy haciendo clic en Reorderar el controller. Por favor, no me digas que establezca la propiedad tableview de allowsSelectionDuringEditing en YES ya que ya lo he hecho y todavía no me deja seleccionar la celda porque está siendo cubierta por el controller de reorder que se agregó a la celda como una subvista.

Mi solución fue preparar un nuevo push segue mediante un gesto de tap en la cell que aún se activaría incluso si la celda estaba cubierta por su reorder controller . Sin embargo, los datos que se envían a la view a la que llama segue siempre provienen de la primera cell sin importar en qué celda haga clic. ¿Por qué sucede esto? Cualquier ayuda es apreciada.

así es como cambié mi control de reorder

 -(void) resizeReorderControl: (UITableView *)tableView reorderCell:(UITableViewCell *)bCell{ // Grip customization code goes in here... UIView* reorderControl = [bCell huntedSubviewWithClassName:@"UITableViewCellReorderControl"]; UIView* resizedGripView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetMaxX(reorderControl.frame), CGRectGetMaxY(reorderControl.frame))]; [resizedGripView addSubview:reorderControl]; [bCell addSubview:resizedGripView]; CGSize sizeDifference = CGSizeMake(resizedGripView.frame.size.width - reorderControl.frame.size.width, resizedGripView.frame.size.height - reorderControl.frame.size.height); CGSize transformRatio = CGSizeMake(resizedGripView.frame.size.width / reorderControl.frame.size.width, resizedGripView.frame.size.height / reorderControl.frame.size.height); // Original transform CGAffineTransform transform = CGAffineTransformIdentity; // Scale custom view so grip will fill entire cell transform = CGAffineTransformScale(transform, transformRatio.width, transformRatio.height); // Move custom view so the grip's top left aligns with the cell's top left transform = CGAffineTransformTranslate(transform, -sizeDifference.width / 2.0, -sizeDifference.height / 2.0); [resizedGripView setTransform:transform]; for(UIImageView* cellGrip in reorderControl.subviews) { if([cellGrip isKindOfClass:[UIImageView class]]) [cellGrip setImage:nil]; } } 

Aquí hay una solución que me funciona.

Para encontrar el control de reorder en iOS7, he cambiado el código y agregué un cheque más

 -(void) resizeReorderControl: (UITableView *)tableView reorderCell:(UITableViewCell *)bCell{ ... UIView* reorderControl = [bCell huntedSubviewWithClassName:@"UITableViewCellReorderControl"]; if (!reorderControl) { reorderControl = [bCell huntedSubviewWithClassName:@"UITableViewCellScrollView"]; // for iOS7 } ... //Then I added my gesture recognizer: ... UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tapGestureRecognizer.delegate = self; [reorderControl addGestureRecognizer:tapGestureRecognizer]; ... } 

Agregue a su vista la statement del controller UIGestureRecognizerDelegate delegado, la interfaz del controller de vista debería verse así:

 @interface ViewController <UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate> 

Luego implementa el método de delegado:

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

También debe implementar el método que especificamos en UITapGestureRecognizer init method:

 - (void)handleTap:(UITapGestureRecognizer *)sender { NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[sender locationInView:self.tableView]]; [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; // If you have custom logic in table view delegate method, also invoke this method too [self tableView:self.tableView didSelectRowAtIndexPath:indexPath]; }