diogo.
diogo.

Reputation: 1113

PageViewController with ViewControllers

I wasn't able to find a working example of a PageViewController with View Controllers as pages.

I just need two horizontal view controllers: viewcontroller1 and viewcontroller2.

Here is my viewDidLoad:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationVertical options:nil];

    self.pageController.dataSource = self;
    [[self.pageController view] setFrame:[[self view] bounds]];

    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle: nil];
    controller1 = [storyboard instantiateViewControllerWithIdentifier:@"first"];
    controller2 = [storyboard instantiateViewControllerWithIdentifier:@"second"];

    viewControllers = [NSArray arrayWithObjects:controller1, nil];

    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    [self addChildViewController:self.pageController];
    [[self view] addSubview:[self.pageController view]];
    [self.pageController didMoveToParentViewController:self];
}


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    return controller1;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    return controller2;
}

The problem is, after swiping the second view, it disappears. Some help understanding the PageViewController would be really nice.

Thanks in advance

Upvotes: 1

Views: 1232

Answers (1)

rdelmar
rdelmar

Reputation: 104082

Change you delegate methods like this, and it should work properly:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if (self.pageController.viewControllers[0] == self.controller2)
        return self.controller1;
    return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    if (self.pageController.viewControllers[0] == self.controller1)
        return self.controller2;
    return nil;
}

Upvotes: 5

Related Questions