uitableviewdatasource uitableviewcontroller uitableviewcell example iphone uitableview

iphone - uitableviewcell - uitableviewcontroller swift 4



Detecta cuando UITableViewCell se apaga de la pantalla (6)

¿Estás seguro de que una célula que sale de la pantalla es exactamente lo que quieres capturar? Si desea marcar elementos como leídos, esto no parece una forma adecuada de hacerlo. Por ejemplo, podría desplazarme rápidamente por la tabla, y me sorprendería mucho si marcara todas las cosas como leídas.

En cuanto a la parte técnica, simplemente mantenga una lista de las celdas que están en la pantalla (cellForRowAtIndexPath debe agregar celdas a esa lista), y en el método de delegado scrollViewDidScroll verifique si alguno de ellos ya no está visible.

Otra idea posible: recuerdo que hay prepareForReuse método prepareForReuse en la celda. Sin embargo, no estoy seguro de cuándo se llama.

Estoy implementando una UITableView rica con UITableViewCell creado a medida, las muestro en la pantalla de una manera, pero una vez que salen de la pantalla quiero tomar nota de eso, ya que la segunda vez que aparecen me gustaría que lo hagan. se muestra de una manera diferente. Piense en "marcar como leído" automáticamente cuando salga de la pantalla.

He estado buscando una forma de detectar cuándo una célula sale de la pantalla (get''s dealloc''ed o dequeued o equivalente), preferiblemente en la clase: UITableViewController para hacer una nota rápida de la fila [indexPath], pero en el: UITableViewCell es igual de bueno.

No he podido hacer esto de manera estándar ... contar las veces que apareció parece descartado ya que realizo múltiples llamadas de recarga de datos en la mesa.

Alguien tiene alguna idea? Esto parece un poco complicado :)


Creo que intentaría comprobar periódicamente la propiedad indexPathsForVisibleRows de UITableView. Desde la ruta de índice más grande, puede deducir que todas las filas anteriores se han desplazado.


Creo que podrías usar el

- (NSArray *)visibleCells

método para su UITableView. Esto devuelve una matriz de todas las celdas que son visibles. A continuación, puede marcar cualquier dato "no visible" (es decir, no en este conjunto) de la manera que desee, de modo que cuando se desplace hacia atrás, se haya actualizado.

Espero que ayude


El método prepareForReuse en UITableViewCell que Andrey Tarantsov menciona se ve bien. Poner un par de NSLogs allí le permite imprimir los valores de cualquier variable de la celda. ¿Alguna idea de cómo se puede volver a establecer esto en el controlador de vista de tabla?


Esta es una vieja pregunta, pero en caso de que alguien esté buscando, en iOS6, se introdujo una nueva función UITableViewDelegate que hace justamente esto:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

Hace un gran trabajo al decirte cada vez que se extrae una celda, sin embargo, es muy completa y, por lo tanto, si hiciste una celda de recarga, incluso la celda anterior que se está reemplazando activará esta función de delegado. En mi implementación, simplemente indexPath si el indexPath pasado todavía está dentro del arreglo tableView.indexPathsForVisibleRows . Algo como:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([tableView.indexPathsForVisibleRows indexOfObject:indexPath] == NSNotFound) { // This indeed is an indexPath no longer visible // Do something to this non-visible cell... } }


Una vez que UITableViewCell sea ​​invisible, se eliminará de UITableView . Puede anular el método -(void)removeFromSuperView , y hacer algo dentro del método. Por último, no te olvides de llamar a [super removeFromSuperView] .