I use the Page-Based Application(RootViewController, DataViewController, ModelController) in Xcode. I want to automatically turn the page after a certain time. How can this be done?

Code in ModelController to flip the page forward / backward

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = [self indexOfViewController:(DataViewController *)viewController]; if ((index == 0) || (index == NSNotFound)) { return nil; } index--; return [self viewControllerAtIndex:index storyboard:viewController.storyboard]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSUInteger index = [self indexOfViewController:(DataViewController *)viewController]; if (index == NSNotFound) { return nil; } index++; if (index == [self.pageData count]) { return nil; } return [self viewControllerAtIndex:index storyboard:viewController.storyboard]; } 

    1 answer 1

    In order to turn over automatically after a certain time, a timer will do:

     NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(nextPage:) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

    and the turning method itself looks like this:

     - (void)nextPage:(id)sender { DataViewController *currentViewController = self.pageViewController.viewControllers[0]; NSUInteger indexOfCurrentViewController = [self.modelController indexOfViewController:currentViewController] + 1; if (indexOfCurrentViewController < self.modelController.pageData.count) { DataViewController *nextViewController = [self.modelController viewControllerAtIndex:indexOfCurrentViewController storyboard:self.storyboard]; NSArray *viewControllers = nil; viewControllers = [NSArray arrayWithObjects:nextViewController, nil]; [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; } } 

    Note that the index of the next page (controller) should not go beyond the array. And the code only works for iphone. For ipad, you can write a test in a similar way, but with 2 controllers. ie, the viewControllers array should contain two controllers.

    pageData The pageData property is pageData to the ModelController class for visibility. But you can implement logic in this class as well.