我不相信你可以操作UIPageViewController的页面控制。我的解决方法:
我有一个作为UIPageViewControllerDelegate和UIPageViewControllerDataSource的“根”UIViewController。
在这个根视图控制器上,我有@property (strong, nonatomic) IBOutlet UIPageControl *pageControl
。在对应的故事板nib中,我添加了一个UIPageControl,将其定位,并选中“单页隐藏”。如果需要,我还可以更改颜色。
然后,在根视图控制器的viewDidLoad中,我添加了以下内容:self.pageControl.numberOfPages = [self.features count]
我的根视图控制器还有一个@property (strong, nonatomic) UIPageViewController *pageViewController
。实现中:
self.pageViewController = [[UIPageViewController alloc]
initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
self.pageViewController.delegate = self;
DataViewController *startingViewController = [self viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:NULL];
self.pageViewController.dataSource = self;
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
self.pageViewController.view.frame = CGRectMake(0.0, 0.0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height + 10.0);
[self.pageViewController didMoveToParentViewController:self];
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
总之,然后我添加了一个额外的UIPageViewController委托方法来将我的新非本机UIPageControl更改为当前选择的页面:
- (void)pageViewController:(UIPageViewController *)viewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if (!completed){return;}
DataViewController *currentViewController = (DataViewController *)[self.pageViewController.viewControllers lastObject];
NSUInteger indexOfCurrentPage = [self indexOfViewController:currentViewController];
self.pageControl.currentPage = indexOfCurrentPage;
}
我希望更漂亮些,但苹果的这个类的API不太容易实现优雅。