2011-03-08 16 views
9

Estoy recargando algunas celdas en mi vista de tabla. Después de que se complete la recarga, quiero desplazarme para que estén visibles. Conozco el método scrollToRowAtIndexPath: atScrollPosition: Pero necesito llamarlo después de la recarga como hecho, ya que dicha recarga cambiará las alturas de fila.¿es posible obtener una devolución de llamada cuando se realiza una recarga de UITableView?

Aquí hay algunas preguntas relacionadas, pero no responden del todo a mi pregunta.
UITableView , Scroll to bottom on reload?
How to Start UITableView on the Last Cell

EDITAR - Mi recarga no insertar o eliminar cualquier fila. Por el contrario, estoy recargando una o más celdas para reflejar información actualizada.

+0

http://stackoverflow.com/questions/5112346/uitableview-scroll-to-bottom-on-reload – Sanniv

+0

http://stackoverflow.com/questions/16071503/how-to-tell-when- uitableview-has-completed-reloaddata – hariszaman

Respuesta

0

Aquí hay algunas maneras hacky que podría hacerlo:

1) Cuando se llama a reloadData, su cellForRowAtIndexPath: delegar la función se llamará una vez para cada célula visible. Puedes contarlos y luego disparar una acción después de haber llamado la función suficientes veces.

2) Apuesto a que algunas de las otras funciones de UITableViewDelegate también se llaman de una manera determinista. Tal vez solo puede llamar a su función de actualización en uno de esos, quizás con un pequeño retraso.

3) También podría usar performSelector: withObject: afterDelay: después de [tableView reloadData] y usar un retraso hard-coded.

-3

No es una solución ideal, pero lo he solucionado utilizando una animación UIView y la correspondiente devolución de llamada de finalización. Coloco esto en una categoría UITableView. Funciona como esperarías.

- (void)reloadDataWithCompletion:(void (^)(BOOL finished))completion { 
    [UIView animateWithDuration:0.33 animations:^(){ 
    [self reloadData]; 
    }completion:completion]; 
} 
Cuestiones relacionadas