我发现了一些关于如何使 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];
}
编辑注:我为出队方法添加了简化的代码。即使使用这种亵渎的实现,我仍然面临着与页面顺序完全相同的问题。
初始化工作都按预期进行。增量分页也正常工作。问题在于,如果我再次调用 jumpToDay
,顺序就会混乱。
如果用户在第-5天,跳到第1天,向左滚动将再次显示第-5天,而不是适当的第0天。这似乎与 UIPageViewController
如何保留对附近页面的引用有关,但我找不到任何强制刷新缓存的方法。
有什么建议吗?