Определить текущую верхнюю ячейку в UITableView после прокрутки - PullRequest
38 голосов
/ 24 ноября 2011

простой вопрос, но, похоже, у меня нет правильной терминологии для поиска по Stackoverflow по нему.

У меня есть UITableView без разделов, пользователь может прокручивать вверх и вниз длинный список данных (строк), представленных внутри этого табличного представления.

Вопрос: как я могу определить самый верхний номер строки ячейки после прокрутки пользователем. (например, если пользователь прокручивает 30 ячеек вниз, верхняя ячейка после прокрутки равна = 30)

Ответы [ 3 ]

71 голосов
/ 24 ноября 2011

Вы можете попробовать использовать UITableView -indexPathsForVisibleRows или -indexPathForRowAtPoint.

Например, предположим, что вы хотите напечатать indexPath самой верхней видимой ячейки, когда вы прекращаете перетаскивать свою таблицу. Вы могли бы сделать что-то вроде этого:

- (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);
}

Для Swift 3.0

let topVisibleIndexPath:IndexPath = self.tableView.indexPathsForVisibleRows![0]
31 голосов
/ 24 ноября 2011

Вы получите пути индекса для видимых строк

NSArray* indexPaths = [tableView indexPathsForVisibleRows];

Затем выполните сортировку, используя compare:

NSArray* sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];

Затем получите строку первого элемента

NSInteger row = [(NSIndexPath*)[sortedIndexPaths objectAtIndex:0] row];
8 голосов
/ 08 декабря 2016

Это код 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)")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...