我不相信你能操纵UIPageViewController的页面控件.我的解决方案:
我有一个"根"UIViewController,即UIPageViewControllerDelegate和UIPageViewControllerDataSource.
在这个根视图控制器上,我有@property (strong, nonatomic) IBOutlet UIPageControl *pageControl
个.在相应的故事板笔尖中,我添加了一个UIPageControl,定位它,并选中"隐藏单个页面".如果我愿意,我也可以改变 colored颜色 .
然后,我在根视图控制器的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视图的高度超过屏幕大小,因此本机页面控件不再可见.我的应用程序仅限于纵向,仅限于iPhone,所以我在这里轻松一点.如果你需要处理旋转,你必须找到一种方法将本机页面控件保持在屏幕外.我使用auto layout进行编辑,但UIPageViewController创建了一组神奇的视图,其中包含一系列我找不到替代方法的autolayout掩码约束.)
无论如何然后,我添加一个额外的UIPageViewController委托方法,将新的非本机UIPageControl更改为当前选定的页面:
- (void)pageViewController:(UIPageViewController *)viewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if (!completed){return;}
// Find index of current page
DataViewController *currentViewController = (DataViewController *)[self.pageViewController.viewControllers lastObject];
NSUInteger indexOfCurrentPage = [self indexOfViewController:currentViewController];
self.pageControl.currentPage = indexOfCurrentPage;
}
虽然没有我想要的那么漂亮,但是苹果的API对于这个类来说并不十分优雅.