Я не верю, что вы можете манипулировать элементом управления страницей 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;
}
Не так красиво, как хотелось бы, но API Apple для этого класса не совсем подходит для элегантности.
person
sirvine
schedule
09.07.2013