Reconozco que UITableview carga dinámicamente una celda cuando el usuario se desplaza. Me pregunto si hay una manera de precargar todas las celdas para no cargar cada una mientras se desplaza. Necesito precargar 10 celdas. es posible?Precargar celdas de uitableview
Respuesta
Puede inicializar las celdas de la vista de tabla, ponerlas en una matriz precomputedCells
y en el método delegado origen de datos tableView:cellForRowAtIndexPath:
devolver las celdas precalculadas de la matriz en lugar de llamar al dequeueReusableCellWithIdentifier:
. (Similar a lo que haría en una vista de tabla estática.)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
return [self.precomputedCells objectAtIndex:indexPath.row];
}
También podría ser útil para echar un vistazo a la WWDC 2012 Sesión 211 "La construcción de interfaces de usuario concurrentes en iOS" donde se demuestra cómo llenar el contenido de las celdas de la vista de tabla en los hilos de fondo mientras se mantiene la interfaz de usuario receptiva.
Cambiar el dequeueReusableCellWithIdentifier cuando se va a reutilizar la vista de tabla de lo contrario se cargará los datos antiguos
que estaba buscando una solución a la pregunta original y pensé que me gustaría compartir mi solución.
En mi caso, solo tenía que precargar la siguiente celda (no entraré en el motivo, pero había una buena razón).
Parece que UITableView representa tantas celdas como caben en el marco de UITableView asignado a ella.
Por lo tanto, sobredimensioné la trama UITableView por la altura de 1 celda extra, empujando la región sobredimensionada fuera de la pantalla (o podría estar en una UIView recortada si fuera necesario). Por supuesto, esto ahora significaría que cuando recorrí la vista de tabla, la última celda no sería visible (porque el marco de UITableView es más grande que su superview). Por lo tanto, agregué una UIView adicional a tableFooterView de la altura de una celda. Esto significa que cuando la tabla se desplaza hacia abajo, las últimas celdas se ubican muy bien en la parte inferior de su supervista, mientras que la tabla agregada FooterView permanece fuera de la pantalla.
Esto, por supuesto, se puede aplicar a cualquier número de celdas. Incluso debería ser posible aplicarlo para precargar TODAS las celdas si fuese necesario al sobredimensionar el marco de UITableView al contenido iOS originalmente calculado, y luego agregar una tablaFooterView del mismo tamaño.
Esperemos que esto ayude a alguien más con el mismo problema.
Esto parece una buena solución. Desafortunadamente no funciona con tablas paginadas. –
¡La clave de las celdas de precarga es su solución! –
Esta es la única solución, hasta el día de hoy. Aunque esto es solo una buena idea si sabe que la altura de su mesa o vista de colección no será demasiado grande, de lo contrario terminará con problemas de memoria y rendimiento. –
Según lo sugerido por Mark, también cambié la altura de mi UITableView temporalmente para que la vista de tabla cree suficientes celdas reutilizables. Luego restablezco la altura de mi vista de tabla para que deje de crear celdas reutilizables mientras se desplaza.
Para lograr eso creo un bool ayudante que se establece en false por defecto:
var didPreloadCells = false
Se establece en true cuando mi vista de tabla vuelve a cargar primero los datos y por lo tanto creó las primeras células reutilizables.
resultsHandler.doSearch { (resultDict, error) -> Void in
[...]
self.tableView.reloadData()
self.didPreloadCells = true
[...]
}
El verdadero truco ocurre en mi método viewDidLayoutSubviews. Aquí configuro el marco de mi vista de tabla dependiendo de mi booleano. Si las celdas reutilizables aún no se crearon, aumente el marco de la vista de tabla.En el otro caso, me puse el cuadro normal
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.tableView.frame = self.view.bounds
if !didPreloadCells
{
self.tableView.frame.size.height += ResultCellHeight
}
}
Con la ayuda de este punto de vista la tabla crea más células reutilizables iniciales de lo normal y el desplazamiento es suave y fluida, porque no hay células adicionales necesitan ser creados.
Solución para el ajuste automático de celdas. Cambio 'estimatedRowHeight' al valor inferior
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 32; //Actual is 64
}
altura estimada actual es 64. 32 se utiliza para añadir más células para su reutilización para evitar retraso cuando se desplaza comienza
- 1. UITableView celdas de carga inversa
- 2. Ocultar celdas vacías en UITableView
- 3. Espacio entre las celdas de UITableView
- 4. Detección de Tap & Hold en celdas UITableView
- 5. Configuración de celdas estáticas en uitableview programáticamente
- 6. UITableView con celdas estáticas no aparece
- 7. Agregar celdas mediante programación a UITableView
- 8. Uso de tipos de estilos de celdas múltiples y celdas personalizadas en una UITableView
- 9. Las celdas de UITableView se lanzan cuando no están visibles
- 10. No se pueden definir las celdas de prototipo en UITableView
- 11. Cómo limitar el número de celdas que muestra UITableview?
- 12. Cargue todas las celdas en UITableView antes de desplazarse
- 13. Creación de celdas personalizadas en la fila estática UITableView
- 14. UITextFields en UITableView, los valores ingresados reaparecen en otras celdas
- 15. Forzar UITableView para llamar a cellForRowAtIndexPath: para todas las celdas
- 16. ¿Cómo usar celdas estáticas en UITableView sin utilizar Storyboards?
- 17. Cómo eliminar la separación entre las celdas UITableView
- 18. Espaciado entre celdas en UITableView con UITableViewCell personalizado
- 19. Precargar imagen de fondo
- 20. ¿Cómo precargar una actividad?
- 21. Precargar imágenes usando jquery
- 22. precargar imágenes de CSS ocultas
- 23. UITableView agregar celda Animación
- 24. Cambiando el radio de la esquina de las celdas insie a agrupado UITableView
- 25. ¿Cómo puedo modificar la apariencia de las celdas 'vacías' en la versión sencilla de UITableView?
- 26. Cambie dinámicamente el color de la línea del separador de celdas UITableView
- 27. Problema al personalizar el estilo de selección de celdas en UITableView en iPhone
- 28. UITableView border de sección
- 29. ¿Cómo precargar o inicializar una búsqueda usando UISearchDisplayController?
- 30. ¿Cómo precargar algunas partes de google maps?
Como usted ha dicho que salvó a los mis células a un NSMutableArray. Luego los precargo uno por uno a través de [self tableView: tablefollow cellForRowAtIndexPath: indexPath1]; . La vista de uitable no está visible en el momento de la precarga. Después de que uitableview es visible, noto que NSString * CellIdentifier = [NSString stringWithFormat: @ "Cell% i-% i", indexPath.section, [indexPath row]]; UITableViewCell * cell = [aTableView dequeueReusableCellWithIdentifier: CellIdentifier]; me está dando cero! ¿Cómo puedo superar este problema? Supongo que se debe a que uitableview no es visible durante la precarga de las celdas. Estoy en lo correcto? – stefanosn
@stefanosn: Mi idea no era utilizar 'dequeueReusableCellWithIdentifier' en absoluto. He actualizado la respuesta en consecuencia. - * También puede ser que no haya entendido bien tu pregunta *. No creo que puedas forzar la vista de tabla para que realmente * cargue * todas las celdas. Incluso si llama a '[self tableView: ... cellForRowAtIndexPath: ...];' para todas las celdas, la vista de tabla podría descartar las celdas no utilizadas. Solo puede * precomputar * todas las celdas (como se describe en mi respuesta) para que la carga de cada celda se realice más rápidamente. - Espero que esto ayude. –
estaba pensando en precargar las celdas en la vista de uitable para que no tenga que devolver una celda en - (UITableViewCell *) tableView: (UITableView *) aTableView cellForRowAtIndexPath: (NSIndexPath *) indexPath para mejorar el desplazamiento. Entonces esto no es posible ¿no? – stefanosn