UTTableView
es una subclase de UIScrollView
, por lo que se pueden utilizar scrollViewDidScroll
método para reorganizar su posición de desplazamiento TableView después del desplazamiento.
Puede usar tableView.contentOffset
para obtener su posición de desplazamiento actual. Y al dividirlo en un número significativo puede obtener qué celda está en la parte superior.
int cellIndex = tableView.contentOffset/cellHegiht;
O puede obtener celda actualmente visible en el centro (arriba, abajo) así:
NSArray *indexPathsForVisibleRows = [tableView indexPathsForVisibleRows];
NSIndexPath *selectedIndexPath = [indexPathsForVisibleRows objectAtIndex:(indexPathsForVisibleRows.count/2)]; //this gets center cell
Después de calcular qué celda se debe pulsar por su borde en la parte superior (o inferior) se puede corregir la deriva desde el borde celular llamando al:
[tableView scrollToRowAtIndexPath:selectedIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Usted puede utilizar UIScrollViewDelegate
métodos para activar chasquido. Puede activar cuando la animación de desplazamiento se completa o mientras la animación continúa. Esto generará una interacción diferente del usuario y no puede decir que una sea mejor que otra.
Pero sólo la implementación siguiente método y nada más parece que va a ser mi favorito:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset {
int cellHeight = 41;
*targetContentOffset = CGPointMake(targetContentOffset->x,
targetContentOffset->y - (((int)targetContentOffset->y) % cellHeight));
}
Este método se llama cuando el usuario toca arriba en TableView
para notificar a la aplicación. targetContentOffset
es una variable inout
por lo que realmente puede establecer la posición de desplazamiento final mientras la animación continúa. Si utiliza cellHeight
, su TableView
siempre se ajustará a las celdas.
Gracias por mostrar cómo usar la variable 'inout'. Muy buena característica! – Besi
+1 También le agradezco que indique la variable "inout". – jpswain
Con tus cálculos matemáticos, nunca puedes desplazarte a la última fila de la tabla ... no hay problema para remediarlo. Definitivamente la mejor solución para esto. – scottbates22