Обнаружение текущей верхней ячейки в UITableView после прокрутки
простой вопрос, но у меня нет подходящей терминологии для поиска Stackoverflow.
У меня есть UITableView без разделов, пользователь может прокручивать вверх и вниз длинный список данных (строк), представленных внутри этой таблицы.
Вопрос:, как я могу определить самый верхний номер строки ячейки после прокрутки пользователя.
(например, если пользователь прокручивает 30 ячеек вниз, верхняя ячейка после прокрутки = 30)
Ответы
Ответ 1
Вы можете попробовать использовать UITableView
-indexPathsForVisibleRows
или -indexPathForRowAtPoint
.
Например, скажем, что вы хотите распечатать indexPath из самой верхней видимой ячейки, когда вы перестанете перетаскивать таблицу. Вы можете сделать что-то вроде этого:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0];
NSLog(@"first visible cell section: %i, row: %i", firstVisibleIndexPath.section, firstVisibleIndexPath.row);
}
Для Swift 3.0
let topVisibleIndexPath:IndexPath = self.tableView.indexPathsForVisibleRows![0]
Ответ 2
Вы получаете указательные пути для видимых строк
NSArray* indexPaths = [tableView indexPathsForVisibleRows];
Затем отсортируйте с помощью compare:
NSArray* sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];
Затем получим первую строку элементов
NSInteger row = [(NSIndexPath*)[sortedIndexPaths objectAtIndex:0] row];
Ответ 3
Это код 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)")
}