iphone - top - Detecta la celda superior actual en una UITableView después de desplazarse
uitableviewcell lifecycle (3)
Este es el código Swift 3+:
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
let firstVisibleIndexPath = self.tableView.indexPathsForVisibleRows?[0]
print("First visible cell section=/(firstVisibleIndexPath?.section), and row=/(firstVisibleIndexPath?.row)")
}
una pregunta simple pero no parece tener la terminología correcta para buscar Stackoverflow.
Tengo una UITableView sin secciones, el usuario puede desplazarse hacia arriba y hacia abajo en una larga lista de datos (filas) presentada dentro de esta tabla vista.
Pregunta: ¿cómo puedo detectar el número de fila de celda más superior después de que el usuario se desplazó? (por ejemplo, si el usuario está desplazándose 30 celdas hacia abajo, la celda superior después del desplazamiento es = 30)
Obtiene las rutas de índice para las filas visibles
NSArray* indexPaths = [tableView indexPathsForVisibleRows];
Luego ordena usando compare:
NSArray* sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];
Luego obtén la fila del primer elemento
NSInteger row = [(NSIndexPath*)[sortedIndexPaths objectAtIndex:0] row];
Puede intentar usar UITableView
- UITableView
- -indexPathsForVisibleRows
o -indexPathForRowAtPoint
.
Por ejemplo, supongamos que desea imprimir el indexPath de la celda visible superior, cuando deja de arrastrar su tabla. Podrías hacer algo como esto:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0];
NSLog(@"first visible cell''s section: %i, row: %i", firstVisibleIndexPath.section, firstVisibleIndexPath.row);
}
Para Swift 3.0
let topVisibleIndexPath:IndexPath = self.tableView.indexPathsForVisibleRows![0]