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

标签 iphone objective-c ios 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/

相关文章:

ios - UITabBarController 和 UINavigationController 中的编辑按钮

objective-c - 用户输入的字符串在应用首选项中保存为 URL

c++ - Cocos2dx InApp Purchase for ios

iphone - 强制iphone应用程序以编程方式重新启动?

ios - 在 iOS 中使用 SwiftyJSON 时无法编译

iphone - 如何去除移动 webkit 上图像周围的白色边框?

iphone - 如何使用 MonoTouch 为 UIButton Alpha 属性设置动画

ios - 使 UILabel 以 45 度角快速交叉背景色

ios - 正确取消NSURLConnection?

iphone - 如何在一个 TextView 中显示字符串的某些部分并在其他 TextView 中扩孔