iphone – didSelectRowAtIndexPath: solo se llama después de pulsación prolongada en la celda personalizada

Estoy creando una aplicación basada en vista de tabla. He creado una celda de tabla personalizada para la tabla, que contiene 2 tags, 1 image y 1 button. El método de origen de datos de vista de tabla funciona correctamente. Estoy usando xib para celdas personalizadas y la class de controller de vista y conecto delegado y fuente de datos al propietario del file. Pero el problema es cuando selecciono la fila de la tabla, didSelectRowAtIndexPath no se está disparando. Como se mencionó, la única forma de disparar es mantener presionada la celda durante unos 3-4 segundos. ¿Alguien tiene alguna idea de por qué esto está sucediendo?

Gracias por cualquier consejo …

Aquí están mis methods de vista de tabla ..

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [finalAddonsArray count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; NewCustomCell *cell = (NewCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"NewCustomCell" owner:self options:nil]; cell=[nib objectAtIndex:0]; } Addons *addons1=[[Addons alloc]init]; addons1= [finalAddonsArray objectAtIndex:indexPath.row]; if (addons1.data == nil) { cell.ivCategory.image = [UIImage imageNamed:@"blogo.jpg"]; } else { cell.ivCategory.image=[UIImage imageWithData:addons1.data]; } cell.lblTitle.text = addons1.name; if (addons1.price == nil) { cell.lblPrice.text = nil; } else{ cell.lblPrice.text = [NSString stringWithFormat:@"%@ rs",addons1.price]; } [cell.button addTarget:self action:@selector(editButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; cell.button.tag=indexPath.row; index = indexPath; cell.selectionStyle = UITableViewCellSelectionStyleGray; return cell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"sjcjksbcjksbcfkebscf1234567890"); } 

Una cosa más estoy recibiendo que si estoy usando UITableViewCell pnetworkingeterminado en lugar de celda personalizada, entonces también mi problema es el mismo, el método de delegado no se está disparando.

Propiedades de celda personalizadas:

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

El mismo problema sucedió conmigo porque agregué un reconocimiento de gesto de toque sobre él. Si ha utilizado algún reconocimiento de gestos, intente eliminarlo y ver si está causando el problema.

EDITAR: Solución como comentó Ali: si ha utilizado el gesto de toque, puede usar [tap setCancelsTouchesInView:NO];

Me enfrenté a un problema similar:

Para mí, el problema fue porque mi UITableView se agregó a un UIScrollView y más específicamente a su contentView . Parece que dentro de contentView , tuve que presionar 2-3 segundos para disparar el método didSelectRowAtIndexPath .

¡Moví mi TableView a self.view lugar de contentView y solucionó el problema!

Tal vez llame al método

[tableView deselectRowAtIndexPath:indexPath animated:NO];

antes de Push ViewController u otra operación. Me gusta

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // 1. manual call this method to deSelect Other Cell [tableView deselectRowAtIndexPath:indexPath animated:NO]; // 2. than do other operation PushViewController Or Some Animation .... } 

eso resuelve mi problema

Estimado, enfrenté el mismo problema. Cuando hice tapping en la celda pero no hice checkenetworkinginatindexpath de lo que fue llamado de repente cuando solté el button después de presionar durante unos segundos.

Si enfrenta el mismo problema, debe haber un 1. UITapGestureRecognizer que crea un problema para usted o 2. una vista de desplazamiento en la que colocó su vista de tabla.

Por lo tanto, debe eliminar el gesto o la vista super scroll en la que se coloca la vista de la tabla

Si tiene un object de gesto personalizado en su vista, verifique la override func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Bool delegate. Compare el gesto personalizado con el gesto del remitente, si no es un gesto personalizado, páselo al super. Entonces, los gestos / toques del sistema no se bloquearán.

No estoy seguro de esto, pero Delays Content Touches podría tener algo que ver con eso.