В настоящее время я пытаюсь эмулировать теги привязки веб-сайтов, чтобы быстро перейти к определенной точке на странице браузера. У меня есть сегментированный элемент управления, который действует как гиперссылка, если хотите. См. рисунок ниже:
По мере роста разделов и строк моего табличного представления это пригодится пользователям в качестве быстрого инструмента, особенно для небольших устройств. Однако я сталкиваюсь с рассолом, приравнивая точки прокрутки к положению первой ячейки раздела, но я бы предпочел, если возможно, получить позицию заголовков разделов.
Моя цель - обновить segmentControl.selectedSegmentIndex при касании (простая часть), а также при прокрутке (рассол), чтобы это было более плавное взаимодействие с пользовательским интерфейсом.
Я настроил свой selectedSegmentIndex
для прокрутки к определенным разделам при нажатии с помощью этих NSIndexPaths
с IBAction
:
NSIndexPath *aboutIndex = [NSIndexPath indexPathForRow:0 inSection:0];
NSIndexPath *contactIndex = [NSIndexPath indexPathForRow:0 inSection:1];
NSIndexPath *publicationsIndex = [NSIndexPath indexPathForRow:0 inSection:2];
NSIndexPath *settingsIndex = [NSIndexPath indexPathForRow:0 inSection:3];
switch (self.segmentControl.selectedSegmentIndex)
{
case 0: [self.tableView scrollToRowAtIndexPath:aboutIndex atScrollPosition:UITableViewScrollPositionTop animated:YES];
break;
//etc etc
...
Используя тот же код, я поместил его в метод scrollViewDidScroll:
, как и следовало ожидать, но мне трудно получить конкретный indexPath текущей точки прокрутки tableView. Я сначала попробовал это, а также [self.tableView indexPathsForVisibleRows]:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSIndexPath *currentIndex = [self.tableView indexPathForRowAtPoint:CGPointMake(0, self.tableView.contentOffset.y)];
NSLog(@"current is %@", currentIndex);
//And then changing the selectedSegmentIndex on scroll:
if ((currentIndex >= aboutIndex) && (currentIndex < contactIndex)) {
self.segmentControl.selectedSegmentIndex = 0;
// other else if's
...
}
Иногда это работает, когда он хочет в основном, и только при прокрутке вниз я получаю нуль при ручной прокрутке вверх. Поэтому я изменил его на:
if ([currentIndex isEqual:aboutIndex]) {
self.segmentControl.selectedSegmentIndex = 0;
} else if ([currentIndex isEqual:contactIndex]) {
self.segmentControl.selectedSegmentIndex = 1;
} else if ([currentIndex isEqual:publicationsIndex]) {
self.segmentControl.selectedSegmentIndex = 2;
} else if ([currentIndex isEqual:settingsIndex]) {
self.segmentControl.selectedSegmentIndex = 3;
}
Который работает все время, кроме прокрутки вверх. Почему я получаю нулевую прокрутку вверх?