une question simple mais je ne semble pas avoir la bonne terminologie pour rechercher Stackoverflow par elle.
J'ai une UITableView sans sections, l'utilisateur peut faire défiler vers le haut et vers le bas une longue liste de données (lignes) présentées dans cette table.
Question: comment puis-je détecter le plus grand nombre de lignes de cellules après le défilement de l'utilisateur. (par exemple, si l'utilisateur fait défiler 30 cellules vers le bas, la cellule supérieure après le défilement est = 30)
Vous pouvez essayer d'utiliser le UITableView
-indexPathsForVisibleRows
ou -indexPathForRowAtPoint
.
Par exemple, disons que vous souhaitez imprimer l'indexPath de la cellule visible la plus haute, lorsque vous arrêtez de faire glisser votre tableau. Vous pouvez faire quelque chose comme ça:
- (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);
}
Pour Swift 3.0
let topVisibleIndexPath:IndexPath = self.tableView.indexPathsForVisibleRows![0]
Vous obtenez les chemins d'index pour les lignes visibles
NSArray* indexPaths = [tableView indexPathsForVisibleRows];
Triez ensuite à l'aide de compare:
NSArray* sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];
Obtenez ensuite la première ligne du premier élément
NSInteger row = [(NSIndexPath*)[sortedIndexPaths objectAtIndex:0] row];
Voici le code 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)")
}