Estoy teniendo un problema con UITableView's
didSelectRowAtIndexPath
.
Mi tabla está configurada para que cuando seleccione fila inicialice un nuevo controlador de vista y lo empuje.
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 didSelectRowAtIndexPath
. Cuando agrego un NSLog
método 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?
uitableview
cocoa-touch
uikit
didselectrowatindexpath
Mark Adams
fuente
fuente
tableView:didSelectRowAtIndexPath:
?Respuestas:
¿Alguna posibilidad de escribir accidentalmente hizo De selectRowAtIndexPath?
fuente
Compruebe también la propiedad de selección de su vista de tabla en el archivo xib. Use 'Selección única' o 'Selección múltiple' según sea necesario.
fuente
Experimenté el siguiente problema:
En mi caso, mi error fue verificar
Show Selection on Touch
en Interface Builder. Puede desmarcarlo en IB aquí:Espero que ayude a alguien
fuente
Marque si ha configurado algún reconocedor de gestos en su clase. Eliminar el gesto funcionó para mí.
fuente
Debatí incluso publicar esta respuesta porque creo que las estrellas se alinearon para que esto se manifestara.
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 destaca, pero
didSelectRowAtIndexPath
no se llama. Todas las otras filas funcionan bien. Pero si enciendo el rebote de la vista de tabla, entonces parece resolver el problema (pero luego tienes que lidiar con un rebote de la vista de tabla).fuente
UITableViewCellSelectionStyleNone se configuró para la celda que muestra ese problema (ios9).
Terminé llamando
lo primero en
lo cual no es lo mismo, pero es lo suficientemente bueno. me hace preguntarme qué tipo de rotura de la mesa trae ios10.
fuente
setSelected
pero mientras el usuario sostiene la celda, aparece la selección que no es aceptableSWIFT 2
Asegúrese de tener esto establecido en verdadero:
self.tableView.allowsSelection = true
Pon esto por encima de tu derecha después de tu
viewDidLoad()
y antes desuper.viewDidLoad()
fuente
SWIFT 3
Si está trabajando con Swift 3 en una clase que no es una
UITableViewController
y está usandoUITableViewDelegate
, entonces es posible que deba usar el título del método:Esto funcionó para mí, aunque acabo de migrar mi proyecto a Swift 3. Es bastante nuevo, por lo que esto se puede solucionar más adelante.
fuente
Si ha configurado algún UITapGestureRecognizer en su clase, puede agregar esta línea en su didSelectRowAtIndexPath:
Esto funcionó para mí.
fuente
Este problema también ocurre cuando trabaja con el reconocedor de gestos dentro de una vista de tabla; en este caso, no necesita eliminarlos, solo debe asegurarse de que su propiedad de gesto
cancelsTouchesInView = false
sea un valor booleano que afecte si los toques se entregan a una vista cuando Se reconoce un gesto.fuente
SWIFT 3
Ninguna de las otras respuestas funcionó en mi caso, lo que me solucionó fue:
tableView.delaysContentTouches = false
fuente
didSelectRowAt
No se llamó a la función en mi aplicación en el primer o segundo toque ... Estaba tratando de resolver el problema, no pude encontrar ninguna solución. Pero de repente me di cuenta, estaba usando view.animation cambio de color ...Delegate
no se llamó al método mientras persistía la animaciónfuente
En mi caso, tenía un encabezado de sección UITableView con un reconocedor de gestos. Cuando se toca el encabezado, debe insertar algunas filas en esa sección y animar la inserción (como la sección expandir / contraer). La primera vez que se expandió y se tocó, el método delegado didSelectRow no se activó. Para más toques y acciones de expansión / colapso, estaba funcionando como se esperaba.
Por respuesta de @Ayoub Nouri establecí cancelsTouchesInView en falso, y esto resolvió el problema. tapGestureRecognizer? .cancelsTouchesInView = false
fuente
Swift 4.2
La desactivación de "Retardo Touch Down" en el inspector de atributos resolvió el problema.
Después de eso, los clics son suaves y didSelectRowAt se dispara inmediatamente.
fuente
Lo que funcionó para mí fue comenzar a escribir "didSelect ..." y luego dejar que la autocorrección completara el resto. Aparentemente, algunos detalles de mi sintaxis eran inestables. Como otros han dicho, ¡usa el IDE!
fuente