Получить текущий закрепленный раздел UITableView

Каков наиболее точный способ получить заголовок или индекс самого верхнего раздела в UITableView? Я не имею в виду раздел в индексе 0, но заголовок раздела, который в настоящее время закреплен вверху при прокрутке.

4 ответа

Вы можете получить раздел в верхней части экрана, например:

********** sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section];

Но этот метод может быть не оптимальным для вас, потому что он получит число, которое будет странным, когда оно находится в переходном периоде между двумя заголовками. Пока вам не нужно знать раздел во время перехода, вы должны быть в порядке. Я надеюсь, что это то, что вы ищете,


Я считаю, что вместо запроса для visibleCells лучше запросить указательные пути следующим образом:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section];

Этот код можно использовать в одном из методов UIScrollViewDelegate в соответствии с вашими потребностями.


Быстрая версия

Используйте сначала (текущее прикрепленное) или последнее (последнее отображается)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section {
 tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true)
 }


Попросите свой класс реализовать UIScrollViewDelegate и выполните следующие функции. Это гарантирует, что вы получите раздел только в том случае, если просмотр таблицы прекратит прокрутку.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
 if (!decelerate)
{
 // retrieve section here
 section = [[[self.tableview visibleCells] objectAtIndex:0] section];
 }
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
 // retrieve section here
 section = [[[self.tableview visibleCells] objectAtIndex:0] section];
}

licensed under cc by-sa 3.0 with attribution.