uitableviewcell top switch guidelines bar iphone objective-c cocoa-touch ipad uitableview

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]