Я нашел несколько вопросов о том, как сделать переход UIPageViewController
на определенную страницу, но я заметил дополнительную проблему с прыжком, что ни один из ответов, похоже, не подтверждает.
Не вдаваясь в подробности моего приложения iOS (которое похоже на кадрированный постраничный календарь), вот что я испытываю. Я объявляю UIPageViewController
, устанавливаю текущий контроллер представления и реализую источник данных.
// end of the init method
pageViewController = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
pageViewController.dataSource = self;
[self jumpToDay:0];
}
//...
- (void)jumpToDay:(NSInteger)day {
UIViewController *controller = [self dequeuePreviousDayViewControllerWithDaysBack:day];
[pageViewController setViewControllers:@[controller]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSInteger days = ((THDayViewController *)viewController).daysAgo;
return [self dequeuePreviousDayViewControllerWithDaysBack:days + 1];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSInteger days = ((THDayViewController *)viewController).daysAgo;
return [self dequeuePreviousDayViewControllerWithDaysBack:days - 1];
}
- (UIViewController *)dequeuePreviousDayViewControllerWithDaysBack:(NSInteger)days {
return [[THPreviousDayViewController alloc] initWithDaysAgo:days];
}
Редактировать Примечание: я добавил упрощенный код для метода dequeuing. Даже при этой богохульной реализации у меня есть та же самая проблема с порядком страниц.
Инициализация работает как и ожидалось. Инкрементный пейджинг работает отлично. Проблема в том, что если я когда-либо позвоню jumpToDay
, порядок будет запутан.
Если пользователь находится в день -5 и переходит к 1-му дню, прокрутка влево показывает день -5 снова вместо соответствующего дня 0. Это, похоже, имеет отношение к тому, как UIPageViewController
хранит ссылки на рядом с ними, но я не могу найти ссылку на метод, который заставил бы его обновить кеш.
Любые идеи?