ios - 为什么我的页面 Controller 不能无限向后滚动?

标签 ios objective-c uipageviewcontroller infinite-scroll

我创建了一个页面 Controller ,它具有三个可以无限向前滚动的 View Controller (例如:1 -> 2 -> 3 -> 1 -> 等)但是当我在第一个 View Controller 上并尝试向后滚动时它进入白屏并且不能正确向后滚动?

我可以很好地向后滚动,直到到达第一个 View Controller ,但之后它只是白屏 (例如:3 -> 2 -> 1 -> 白屏)

我希望能够无限向后滚动,所以它看起来像这样 (例如:3 -> 2 -> 1 -> 3 -> 等)

这是我的页面 View Controller 代码,我不知道我做错了什么?

有人可以帮我让我的页面 View Controller 无限向后滚动吗?谢谢!

    #import "PageViewController.h"

@interface PageViewController ()

@end

@implementation PageViewController
{
    NSArray *myViewControllers;


}




- (void)viewDidLoad {
    [super viewDidLoad];

    self.delegate = self;
    self.dataSource = self;

    UIViewController *p1 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"ContentViewController1"];
    UIViewController *p2 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"ContentViewController2"];
    UIViewController *p3 = [self.storyboard
                            instantiateViewControllerWithIdentifier:@"ContentViewController3"];

    myViewControllers = @[p1,p2,p3];

    [self setViewControllers:@[p1]
                   direction:UIPageViewControllerNavigationDirectionForward
                    animated:NO completion:nil];




    NSLog(@"loaded!");

}




-(UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
    return myViewControllers[index];
}



-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
     viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];

    --currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}



-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [myViewControllers indexOfObject:viewController];

    ++currentIndex;
    currentIndex = currentIndex % (myViewControllers.count);
    return [myViewControllers objectAtIndex:currentIndex];
}


-(NSInteger)presentationCountForPageViewController:
(UIPageViewController *)pageViewController
{
    return myViewControllers.count;
}

-(NSInteger)presentationIndexForPageViewController:
(UIPageViewController *)pageViewController
{
    return 0;
}


@end

最佳答案

在您的 viewControllerBeforeViewController 函数中,模运算符 % 没有执行您想要的操作。你的数字是这样的,% 不会让你回到第三个 View :

2、1、0、-1。

向后时,您必须检查是否已换行,然后明确转到最后一个。

关于ios - 为什么我的页面 Controller 不能无限向后滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834524/

相关文章:

ios - 我的一个 UICollectionViews 没有滚动或响应我的 UIScrollView 容器内的触摸事件 [Puzzling]

ios - 如何在 IOS 7 中实现 UIViewController 与前后过渡的导航?

ios - 从 Parse iOS 下载图像

ios - 如何重复函数 Swift 的一部分

ios - 从 NSArray 中删除重复的键值

ios - locationInNode : inaccurate after scaling the scene

ios - 在 iOS 中未填充所有 UITextField 时尝试禁用按钮

ios - 通过 uislider 和 gpuimage 过滤器改变图像的亮度

IOS/objective-C ;在 if else 逻辑中使用 Return 语句结束方法

ios - 带有 uiPageViewControllers 的 SetViewControllers 不工作