Ocultar puntos de UIPageViewController

Me gustaría hacer algo bastante simple. Simplemente quite todos los puntos y la barra en la parte inferior del UIPageViewController.

Esta es la configuration: tengo un controller de vista personalizado que tiene UIPageViewController * pageController Lo visualizo así:

self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil]; self.pageController.dataSource = self; [[self.pageController view] setFrame:[self.view bounds]]; BSItemPageViewController *initialViewController = [self viewControllerAtIndex:selectedIndex]; NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil]; [self addChildViewController:self.pageController]; [[self view] addSubview:[self.pageController view]]; [self.pageController didMoveToParentViewController:self]; 

¿Alguna idea sobre cómo elimino los puntos?

El control de página solo se muestra si el origen de datos implementa estos methods:

 presentationCountForPageViewController: presentationIndexForPageViewController: 

Simplemente elimine su implementación de estos, y el control de la página no se mostrará. De los documentos de origen de datos :

Si se implementan los dos methods en "Compatibilidad con un indicador de página" y el estilo de transición del controller de vista de página es UIPageViewControllerTransitionStyleScroll, se puede ver un indicador de página.

En mi situación tengo varios UIPageViewControllers (creados a partir de – [UITableView didSelectRowAtIndexPath]), algunos de los cuales contienen solo 1 página. En lugar de usar diferentes controlleres para diferentes filas de UITableView, implementé el método delegado de UIPageViewController de la siguiente manera:

 - (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController { return ([self numberOfPages] == 1 ? 0 : [self numberOfPages]); } 

Esto devuelve 0 si solo hay una página que parece hacer que UIPageViewController no muestre los puntos. Es un kludge pero parece funcionar (iOS SDK 7.0).

Supongo que una forma "limpia" sería eliminar los methods en time de ejecución para que UIPageControllers tenga solo una página, pero esto implicaría una manipulación oblicua del time de ejecución de objC.

Comentarios sobre este enfoque?

Si desea ocultar esos puntos dinámicamente en time de ejecución, luego devuelva -1 del delegado presentationIndexForPageViewController:

 func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return yourPageVCs.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return yourPageVCs.count > 1 ? 0 : -1 } 

En este caso, si solo tiene una página de una sola cara, los puntos se ocultarán.

Las correcciones anteriores funcionan bien con un número fijo de páginas al principio.

Intenté diferentes enfoques para resolver el problema cuando las páginas se pueden boost o disminuir dinámicamente .

Entonces usé el siguiente método que ocultará manualmente el componente en sí.

 func togglePageControl(pageCount: Int, threshold: Int = 1) { var hidden = true if pageCount > threshold { hidden = false } for subView in self.view.subviews { if subView is UIScrollView { subView.frame = self.view.bounds } else if subView is UIPageControl { subView.isHidden = hidden } } } 

Y esto debería llamarse de

 public func presentationCount(for pageViewController: UIPageViewController) -> Int { togglePageControl(pageCount: pages.count) // or togglePageControl(pageCount: pages.count, threshold: 5) return pages.count }