我发现了一些关于如何制作 UIPageViewController
的问题。跳转到特定页面,但我注意到跳转的另一个问题,似乎没有一个答案承认。
在不详细介绍我的 iOS 应用程序(类似于分页日历)的情况下,这就是我所经历的。我声明一个 UIPageViewController
,设置当前 View Controller ,实现数据源。
// 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
的方式有关。保留对附近页面的引用,但我找不到任何对强制刷新缓存的方法的引用。
有什么想法吗?
最佳答案
Programming iOS6 , by Matt Neuburg 记录了这个确切的问题,我实际上发现他的解决方案感觉比目前接受的答案要好一些。该解决方案效果很好,但具有负面影响,即在之前/之后对图像进行动画处理,然后用所需页面替换该页面。我觉得这是一种奇怪的用户体验,而 Matt 的解决方案可以解决这个问题。
__weak UIPageViewController* pvcw = pvc;
[pvc setViewControllers:@[page]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES completion:^(BOOL finished) {
UIPageViewController* pvcs = pvcw;
if (!pvcs) return;
dispatch_async(dispatch_get_main_queue(), ^{
[pvcs setViewControllers:@[page]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO completion:nil];
});
}];
关于iphone - UIPageViewController,如何在不打乱数据源指定顺序的情况下正确跳转到特定页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633059/