iphone - UIPageViewController,如何在不打乱数据源指定顺序的情况下正确跳

我发现了一些关于如何制作 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/

相关文章:

objective-c - Foo 类在 MyApp 和 MyAppTestCase 中都实现了。将

ios - 是否在 iOS SDK 中的任何位置定义了 HTTP 状态代码?

iphone - 重复符号问题

ios - 在代码生成的 UIView 上绘制 UIBezierPath

iphone - 带有 "Go"按钮而不是返回的 iOS 键盘

ios - 将输入 View 添加到文本字段 iOS 8 时出错

ios - Xcode 如何加载主 Storyboard ?

iphone - 在 NSUserDefaults 中存储值是否有任何限制?

ios - NSNotificationCenter 的帖子导致 "EXC_BAD_ACCESS"异

ios - 每次 Xcode 重新启动时 View 错位