How to implement UIPageViewController that utilizes multiple ViewControllers

后端 未结 4 789
攒了一身酷
攒了一身酷 2020-11-28 22:49

I\'ve been working on a simple test app to learn the ins and outs of the UIPageViewController. I have it working but I\'m not convinced my execution is the best way. I hop

4条回答
  •  心在旅途
    2020-11-28 23:04

    Basically, I managed to get a slightly different way which is based on the template provided by XCode 6.4 (Page-Based Application) methods and the insights from other authors (including this, @Ben from other answers):

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.viewControllersArray = @[@"FirstViewController", @"SecondViewController"];
    ...
    }
    
    ...
    
    - (UIViewController *)viewControllerAtIndex:(NSUInteger)index {
    
        UIViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:[self.viewControllersArray objectAtIndex:index]];
        //childViewController.index = index;
        return childViewController;
    
    }
    
    - (NSUInteger)indexOfViewController:(UIViewController *)viewController {
        NSString *restorationId = viewController.restorationIdentifier;
        return [self.viewControllersArray indexOfObject:restorationId];
    }
    
    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    
        NSUInteger index = [self indexOfViewController:(UIViewController *)viewController];
        if ((index == 0) || (index == NSNotFound)) {
            return nil;
        }
    
        index--;
        return [self viewControllerAtIndex:index];
    }
    
    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    
        NSUInteger index = [self indexOfViewController:(UIViewController *)viewController];
        if (index == NSNotFound) {
            return nil;
        }
    
        index++;
        if (index == [self.viewControllersArray count]) {
            return nil;
        }
        return [self viewControllerAtIndex:index];
    }
    

提交回复
热议问题