uitableview cocoa-touch uikit didselectrowatindexpath

UITableView didSelectRowAtIndexPath: no se llama en el primer toque



cocoa-touch uikit (12)

¿Alguna posibilidad de que tecleó accidentalmente De selectRowAtIndexPath?

Tengo un problema con UITableView''s didSelectRowAtIndexPath .

Mi tabla está configurada de modo que cuando selecciono la fila inicializa un nuevo controlador de vista y lo empuja.

La primera vez que toco cualquier fila de la tabla, no se llama al método. Una vez que selecciono otra fila, comienza a funcionar normalmente.

He verificado esto estableciendo un punto de interrupción en didSelectRowAtIndexPath . Al agregar un NSLog al método, veo que cuando selecciono la segunda fila que finalmente empuja el nuevo controlador de vista, veo dos declaraciones de registro que aparecen en la consola al mismo tiempo.

¿Alguna sugerencia?


Debatí incluso publicar esta respuesta porque creo que las estrellas se alinean para que esto se manifieste.

Estoy teniendo una variación de este problema y he comprobado las otras soluciones. En mi vista de tabla no está procesando la última fila de mi tabla en el primer toque. Lo resalta, pero didSelectRowAtIndexPath no se está llamando. Todas las otras filas funcionan bien. Pero si enciendo el rebote de tableview, entonces parece que se resuelve el problema (pero entonces tienes que lidiar con un rebote de tableview).


Experimenté el siguiente problema:

  • primer toque en la fila -> sin efecto, sin selección, nunca
  • segundo toque y seguimiento -> comportamiento de selección correcto, siempre

En mi caso, mi error fue verificar Show Selection on Touch en Interface Builder. Puedes desmarcarlo en IB aquí:

Espero que ayude a alguien


La función didSelectRowAt no fue llamada en mi aplicación en el primer o segundo toque ... Estaba tratando de resolver el problema, no encontré ninguna solución. Pero de repente reconocí, estaba usando el cambio de color de view.animation ... No se invocó el método de delegado mientras persistía la animación


Marque si ha establecido algún reconocedor de gestos en su clase. Quitarme el gesto funcionó.


Si ha configurado cualquier UITapGestureRecognizer en su clase, puede agregar esta línea en su didSelectRowAtIndexPath:

[tableView deselectRowAtIndexPath:indexPath animated:NO];

Esto funcionó para mí.


UITableViewCellSelectionStyleNone se configuró para la celda que muestra ese problema (ios9).

He terminado llamando

[tableView deselectRowAtIndexPath:indexPath animated:NO];

primera cosa en

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Lo que no es lo mismo, pero es lo suficientemente bueno. me hace preguntarme qué tipo de rotura de mesa trae ios10.


Verifique también la propiedad de selección de su vista de tabla en el archivo xib. Utilice ''Selección única'' o ''Selección múltiple'' según sea necesario.


este problema ocurre también cuando trabaja con el reconocedor de gestos dentro de un tableView en este caso, no necesita eliminarlos, solo necesita asegurarse de que su propiedad gestual cancelsTouchesInView = false este es un valor booleano que afecta si se entregan toques Una vista cuando se reconoce un gesto.


SWIFT 2

Asegúrese de tener este conjunto en verdadero:

self.tableView.allowsSelection = true

Coloca esto arriba de tu derecha después de tu viewDidLoad() y antes de super.viewDidLoad()


SWIFT 3

Ninguna de las otras respuestas funcionó en mi caso, lo que lo solucionó para mí fue:

tableView.delaysContentTouches = false


SWIFT 3

Si está trabajando con Swift 3 en una clase que no es un UITableViewController y está utilizando UITableViewDelegate , es posible que deba usar el título del método:

@objc(tableView:didSelectRowAtIndexPath:) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){...}

Esto funcionó para mí, aunque acabo de migrar mi proyecto a Swift 3. Es bastante nuevo, por lo que se puede solucionar más tarde.