我不相信你可以操纵 UIPageViewController 的页面控件。我的解决方案:
我有一个“根”UIViewController,即 UIPageViewControllerDelegate 和 UIPageViewControllerDataSource。
在这个根视图控制器上,我有@property (strong, nonatomic) IBOutlet UIPageControl *pageControl
. 在相应的故事板笔尖中,我添加了一个 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 的视图的高度超过了屏幕尺寸,因此本机页面控件不再可见。我的应用程序仅是纵向的,仅适用于 iPhone,所以我在这里稍微轻松了一点。如果您需要处理旋转,则必须找到一种方法使本机页面控件保持在屏幕外。我尝试使用自动布局,但是 UIPageViewController 创建了一组魔术视图,其中包含一堆我无法做到的自动布局掩码约束找到一种方法来覆盖。)
无论如何......然后我添加了一个额外的 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;
}
没有我想的那么漂亮,但是 Apple 的这个类的 API 并不完全适合优雅。