Estoy tratando de crear un UITableView con las fechas, no debería ser muy emocionante, lo sé. Comienza alrededor de la fecha actual, pero el usuario debe poder desplazarse hacia abajo (el futuro) y hacia arriba (el pasado) tanto como lo desee. Esto da como resultado un número potencialmente infinito de filas. Entonces, ¿cuál es el camino a seguir para crear esto?Desplazamiento eterno UITableView
Volviendo NSIntegerMax
como el número de filas que ya se bloquea la aplicación, pero incluso si no, que todavía no tiene en cuenta por ser capaz de desplazarse hasta . Podría comenzar a mitad de camino, por supuesto, pero finalmente hay un máximo.
¿Alguna idea de cómo hacer o falsificar esto? ¿Puedo actualizar/volver a cargar la tabla de alguna manera sin que el usuario se dé cuenta, así que nunca me encuentro con un borde?
SOLUCIÓN:
Fui con la sugerencia de Ender @ e hizo una mesa con una cantidad fija de células. Pero en lugar de volver a cargarlo cuando el usuario se desplaza cerca de los bordes de las celdas fijas, fui con la recarga de la mesa cuando el desplazamiento se detiene. Para acomodar a un usuario desplazándose grandes distancias sin detenerse, acabo de aumentar el recuento de filas a 1000, poniendo la constante ROW_CENTER en 500. Este es el método que se encarga de actualizar las filas.
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSArray *visible = [self.tableView indexPathsForVisibleRows];
NSIndexPath *upper = [visible objectAtIndex:0];
NSIndexPath *lower = [visible lastObject];
// adjust the table to compensate for the up- or downward scrolling
NSInteger upperDiff = ROW_CENTER - upper.row;
NSInteger lowerDiff = lower.row - ROW_CENTER;
// the greater difference marks the direction we need to compensate
NSInteger magnitude = (lowerDiff > upperDiff) ? lowerDiff : -upperDiff;
self.offset += magnitude;
CGFloat height = [self tableView:self.tableView heightForRowAtIndexPath:lower];
CGPoint current = self.tableView.contentOffset;
current.y -= magnitude * height;
[self.tableView setContentOffset:current animated:NO];
NSIndexPath *selection = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
if (selection)
{
// reselect a prior selected cell after the reload.
selection = [NSIndexPath indexPathForRow:selection.row - magnitude inSection:selection.section];
[self.tableView selectRowAtIndexPath:selection animated:NO scrollPosition:UITableViewScrollPositionNone];
}
}
Se rompe la magia, cuando el usuario se desplaza hasta el borde de la mesa sin parar, pero con la vista de tabla bounces
propiedad discapacitados, esto simplemente se siente como un problema menor, sin embargo, totalmente aceptable. Como siempre, ¡gracias StackOverflow!
Por favor, pruebe el código en mi respuesta a continuación. Está usando una lógica simple. –