ios7 uinavigationcontroller uipageviewcontroller

ios7 - UIPageViewController dentro de NavigationController



uinavigationcontroller (3)

No sé si todavía estás trabajando en esto, pero aquí va de todos modos. Para configurar un UIPageViewController puede usar el tutorial y las dos preguntas a continuación.

http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/

Cómo implementar UIPageViewController que utiliza varios ViewControllers

Cómo agregar UIBarButtonItem a NavigationBar al usar UIPageViewController

El último enlace se refiere específicamente a la configuración del contenido de la barra de navegación según lo que esté viendo.

La clave es crear una propiedad UINavigationItem en el archivo .h de sus controladores de vista de contenido UIPageViewController, es decir, los que están mostrando lo que está mostrando.

Desde mi código en FirstViewController.h SecondViewController.h y ThirdViewController.h

@property (strong, nonatomic) UINavigationItem *navItem;

En el segundo y tercer enlace de arriba verás un diseño de guión gráfico de una aplicación de detalles maestros (que utiliza un controlador de navegación). El UIPageViewControllerDataSource es el DetailViewController . Las tres páginas asociadas con pageViewController son mis controladores de vista de contenido.

En DetailViewController.m tienes que crear una instancia de contentViewControllers en algún lugar. En ese momento, se pasa la identificación del elemento de navegación DetailViewControllers a los controladores de vista de contenido. Aquí es cómo puedo crear una instancia de mis controladores de vista de contenido utilizando los métodos de delegado de UIPageViewController .

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSString * ident = viewController.restorationIdentifier; NSUInteger index = [_vc indexOfObject:ident]; if ((index == 0) || (index == NSNotFound)) { return nil; } index--; if (index == 0) { return [self controllerAtIndex:index]; }else if (index == 1){ return [self secondControllerAtIndex:index]; }else if (index == 2){ return [self thirdControllerAtIndex:index]; }else{ return nil; } }

El método de delegado llama al método de abajo. Es casi directamente desde el enlace del tutorial con solo algunas modificaciones.

-(FirstController *)controllerAtIndex:(NSUInteger)index { FirstController *fvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPageController"]; fvc.imageFile = self.pageImages[index]; fvc.titleText = self.pageTitles[index]; fvc.pageIndex = index; fvc.navItem = self.navigationItem; return fvc; }

Observe que las propiedades se pasan al controlador de vista, incluido self.navigationItem . Al pasar, se asegura de que puede realizar cambios en los elementos de la barra de navegación.

Luego, en el método viewDidAppear de su controlador de vista de contenido, simplemente puede configurar el título en la barra de navegación de esta manera.

navItem.navigationItem.title = @"Whatever you want the title to be";

Es importante usar viewDidAppear porque viewDidLoad no se llama cada vez que aparece la pantalla. Creo que el UIPageViewController almacena en caché la página anterior y la página posterior a lo que esté viendo, lo que evita que el sistema tenga que cargar la página cada vez que navega por ella.

Si está utilizando un controlador de vista única para todas las páginas como lo hace el tutorial, tendrá que usar la propiedad de índice para saber en qué establecer el título.

¡Espero que esto ayude!

He leído todos los tutoriales que he encontrado sobre UIPageViewController, pero solo muestran lo básico, me gustaría crear algo así como la nueva aplicación de Twitter:

UIPageViewController está integrado en el controlador de navegación, el título de la barra de navegación se basa en la página actual y esos puntos de página también están allí, el usuario puede tocar el elemento en la página actual (elemento de la vista de tabla / vista de colección) para ver los detalles.

Pude encontrar algo similar, cada página tenía una vista de colección, y los detalles de algún elemento se reflejaban en la barra de navegación, había el título correcto y el botón "<", pero no pude cambiar el título en función de pagina mostrada

Por favor, ¿podría describirme cómo hacer esto en unos pocos pasos / estructura básica de los controladores?


Sr. Isuru! Tengo su pregunta ... La solución dada por el Sr. Micnguyen es la solución exacta, pero el método del delegado mencionado (didFinishAnimating ()) se llama cuando se realiza una acción de deslizamiento debido a que inicialmente no se muestra el título.

Por lo tanto, para resolver ese problema, debemos establecer su valor inicial en el método viewDidLoad () de la clase UIPageViewController como se menciona a continuación:

  • (void) viewDidLoad () {self.navigationitem.title = arrayname [0]; }

Gracias !


Tenía una configuración muy similar y resolví el problema.

Mi configuración es que tengo un UIPageViewController dentro de un UINavigationController porque quería que la barra de navegación fuera persistente mientras pasaba entre cada controlador de vista. Quería que el título del UIViewController actual dentro del UIPageViewController se convirtiera en el título del UINavigationController.

La forma de hacerlo es implementar el método pageViewController didFinishAnimating que se activa después de que se pageViewController didFinishAnimating un cambio en un controlador de vista desde UIPageViewController. Probablemente pueda ver a dónde va: Desde aquí, establezca la propiedad navigationItem.title de UIViewPageController, que UINavigationController utiliza para establecer su propio título, con el del título del controlador de vista actual.

Ejemplo:

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed { if(finished && completed) { NSString *titleOfIncomingViewController = [[pageViewController.viewControllers firstObject] title]; pageViewController.navigationItem.title = titleOfIncomingViewController; } }

NB: este método de delegado solo activa los desplazamientos iniciados por gestos.