¿Deselección automática de la celda de vista de tabla después de aparecer la vista detallada?

Me ha dejado perplejo esto por un time …

Cuando toca la celda de un contacto en la aplicación Teléfono de Apple para el iPhone (ingresando la vista con detalles de contacto) y vuelve a la vista anterior, aparece una breve animation (desvaneciéndose de azul a blanco) que muestra la cancelación de la celda. Este es el comportamiento con todas las vistas de tabla en las aplicaciones propias de Apple, y también el comportamiento recomendado de acuerdo con sus Guías de interfaz humana.

Sin embargo, en mi propio proyecto, he tenido problemas para replicar este comportamiento. Ninguna de las celdas en mi UITableView está seleccionada cuando vuelvo desde una vista de detalle.

Miré a través del código de ejemplo de CoreDataBooks en la documentation de Apple, que tiene el comportamiento de deselección de celda deseado, y parece que la vista de tabla obtiene el comportamiento "automáticamente" (sin ninguna implementación específica).

También he intentado implementar las soluciones en estas preguntas muy similares:

¿Qué anula la selección de la celda seleccionada cuando el controlController muestra una vista?

Las células UITableView de iPhone permanecen seleccionadas

UITableView no mantiene la fila seleccionada a la vuelta

Pero siempre obtengo el mismo resultado: ninguna de las celdas en UITableView se selecciona cuando vuelvo a ella. (Incluso después de agregar [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated]; en el controller de vista -viewWillAppear: method).

También se sugirió en los comentarios de una pregunta que teniendo [[self tableView] reloadData]; in- -viewWillAppear: puede estar causando que las celdas no permanezcan seleccionadas. Pero CoreDataBooks hace lo mismo y aún tiene el comportamiento deseado (aparentemente) sin ningún código específico.

¿Alguna sugerencia sobre cómo resolver el problema? Gracias por adelantado.

En una nota al margen, no entiendo por qué el código para anular la selección de la celda debe implementarse en -viewWillAppear: (en lugar de -viewDidAppear: . ¿No provocaría que todo suceda antes de que se muestre la vista de la tabla en la pantalla? Esto probablemente se deba simplemente a la falta de comprensión adecuada del ciclo de vida de una vista por mi parte, pero cualquier aclaración sería agradable. Gracias de nuevo.

¿Ha experimentado con la propiedad clearsSelectionOnViewWillAppear de un UITableViewController (no solo una vista de tabla, sino un control de vista de tabla)? Si lo establece en NO , hará que la selección se mantenga azul.
Para get el efecto deseado, probablemente también deba agregar una llamada a
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated
para asegurarse de que no se quede azul para siempre.

Mire en la sección Resumen de la Documentación UITableView para comenzar.

// EDIT // Como se indicó en los comentarios a continuación, lo que finalmente terminamos haciendo es mover la llamada a [[self tableview] reloadData]; para viewDidAppear
Mi conjetura es que CoreDataBooks tiene una tabla suficientemente compleja (con secciones y libros, secciones y libros) que algo está sucediendo con el momento de los events.

Si desea anular la selección de una celda, use la - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated y use [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; o [tableView deselectRowAtIndexPath:indexPath animated:YES]; .