iOS 以编程方式创建水平分页UIPageViewController
示例
由UIPageViewController管理的视图控制器的初始化数组。添加具有属性的基本视图控制器类,该类identifier将在使用UIPageViewController数据源方法时用于标识视图控制器。让视图控制器从该基类继承。
UIViewController *firstVC = [[UIViewController alloc] init]; firstVC.identifier = 0 UIViewController *secondVC = [[UIViewController alloc] init]; secondVC.identifier = 1 NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
创建UIPageViewController实例。
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
数据源是当前类,必须实现UIPageViewControllerDataSource协议。
pageViewController.dataSource = self;
setViewControllers将仅添加第一个视图控制器,然后使用数据源方法将下一个添加到堆栈
if (viewControllers.count) { [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; }
将UIPageViewController添加为子视图控制器,以便它将从其父视图控制器appearance和rotation事件接收。
[self addChildViewController:pageViewController]; pageViewController.view.frame = self.view.frame; [self.view addSubview:pageViewController.view]; [pageViewController didMoveToParentViewController:self];
实现UIPageViewControllerDataSource方法
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { index = [(Your View Controler Base Class *)viewController identifier]; index--; return [self childViewControllerAtIndex:index]; } - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { index = [(Your View Controler Base Class *)viewController identifier]; index++; return [self childViewControllerAtIndex:index]; } - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { return [viewControllers count]; } - (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController { return index; }
一种使用索引返回视图控制器的实用程序方法,如果索引超出范围,则返回nil。
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index { if (index <= ([viewControllers count] - 1)) { return [viewControllers objectAtIndex:index]; } else { return nil; } }