0
votes

There are 15 viewcontrollers in my App.I want to swipe them horizontally. I have added all these view controllers in uipageviewcontroller(I have written this code in my first viewcontroller). Each of the 15 viewcontrollers contains buttons to go to the remaining all viewcontrolers.so How could I jump to these viewcontrollers inside pageviewcontroller?,so that I can not come outside of horizontal swipe.

This is my code.Currently I have added three viewcontrollers in uipageviewcontroller.

This is what I have written in Appdelegate.

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic, strong) UIPageViewController *pageViewController;

@property (nonatomic, strong) NSArray *contentViewControllers;

This is my viewcontroller.m (i.e. initial viewcontroller).

APP_DELEGATE.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageView"];
    APP_DELEGATE.pageViewController.dataSource = self;

         UIViewController *init = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];

        FirstViewController *first = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstViewController"];

        secondViewController *second = [self.storyboard instantiateViewControllerWithIdentifier:@"secondViewController"];

        thirdViewController *third = [self.storyboard instantiateViewControllerWithIdentifier:@"thirdViewController"];


        APP_DELEGATE.contentViewControllers = [NSArray arrayWithObjects:init,first,second,third,first,nil];

        [APP_DELEGATE.pageViewController setViewControllers:@[first] direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil];

        [self addChildViewController:APP_DELEGATE.pageViewController];
        [self.view addSubview:APP_DELEGATE.pageViewController.view];
        [APP_DELEGATE.pageViewController didMoveToParentViewController:self];

        self.view.backgroundColor = [UIColor colorWithRed:(248.0/255.0) green:(248.0/255.0) blue:(248.0/255.0) alpha:1.0];
    }

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
          viewControllerBeforeViewController:(UIViewController *)viewController {

        NSUInteger index = [APP_DELEGATE.contentViewControllers indexOfObject:viewController];

        if (index == 1) {
            return nil;
        }

        return APP_DELEGATE.contentViewControllers[index - 1];
    }

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
           viewControllerAfterViewController:(UIViewController *)viewController {

        NSUInteger index = [APP_DELEGATE.contentViewControllers indexOfObject:viewController];

        if (index >= APP_DELEGATE.contentViewControllers.count - 1) {
            return nil;
        }

        return APP_DELEGATE.contentViewControllers[index + 1];
    }


    This is my secondViewcontroller.m

    - (IBAction)moveToFirstButtonAction:(id)sender {

        FirstViewController *fvc = [APP_DELEGATE.contentViewControllers objectAtIndex:1];

        fvc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
        [self presentViewController:fvc animated:YES completion:nil];

    }

Using this method I jump to the firstViewcontroller. But I come out of horizontal swipe. i.e. horizontal swipe will not work then.

1
share your whole code - Jay Gajjar

1 Answers

0
votes

You can get the reference of viewcontrollers in array. Like this way:

PageViewController *pageView;

would be your page view.

@property (nonatomic, readonly) NSArray *viewControllers;

NSArray *viewControlers = pageView.viewControllers;

And thereafter you can go to any viewcontroller just passing the index of viewcontroller you want to go.

Thanks it helps.

Regards, Harry