¿Es posible pasar la página mediante programación UIPageViewController
?
ios
ios5
uikit
uipageviewcontroller
RAGOpoR
fuente
fuente
Respuestas:
Sí, es posible con el método:
Ese es el mismo método utilizado para configurar el primer controlador de vista en la página. De manera similar, puede usarlo para ir a otras páginas.
¿Me pregunto por qué
viewControllers
es una matriz y no un solo controlador de vista?Esto se debe a que un controlador de vista de página podría tener una "columna vertebral" (como en iBooks), que muestra 2 páginas de contenido a la vez. Si muestra 1 página de contenido a la vez, simplemente pase una matriz de 1 elemento.
Un ejemplo en Swift:
fuente
Como también necesitaba esto, entraré en más detalles sobre cómo hacerlo.
Nota: Supongo que usó el formulario de plantilla estándar para generar su
UIPageViewController
estructura, que tiene tanto elmodelViewController
ydataViewController
creado cuando lo invoca. Si no comprende lo que escribí, regrese y cree un nuevo proyecto que use elUIPageViewController
como base. Entonces lo entenderás.Por lo tanto, la necesidad de pasar a una página en particular implica configurar las diversas partes del método enumerado anteriormente. Para este ejercicio, supongo que es una vista de paisaje con dos vistas que se muestran. Además, implementé esto como una IBAction para que se pueda hacer presionando un botón o no, es igual de fácil hacer que el selector llame y pase los elementos necesarios.
Entonces, para este ejemplo, necesita los dos controladores de vista que se mostrarán, y opcionalmente, ya sea que avance en el libro o retroceda.
Tenga en cuenta que simplemente codifiqué dónde ir a las páginas 4 y 5 y utilizo un deslizamiento hacia adelante. Desde aquí puede ver que todo lo que necesita hacer es pasar las variables que lo ayudarán a obtener estos elementos ...
fuente
Aquí hay otro ejemplo de código para una sola vista paginada. La implementación de viewControllerAtIndex se omite aquí, debería devolver el controlador de vista correcto para el índice dado.
Las páginas pueden cambiarse llamando
fuente
Podría estar perdiendo algo aquí, pero esta solución parece mucho más simple que muchas otras propuestas.
fuente
Este código funcionó muy bien para mí, gracias.
Esto es lo que hice con eso. Algunos métodos para avanzar o retroceder y uno para ir directamente a una página en particular. Es para un documento de 6 páginas en vista vertical. Funcionará bien si lo pega en la implementación del RootController de la plantilla pageViewController.
fuente
Swift 4:
Necesitaba ir al siguiente controlador cuando toco el siguiente en un controlador de vista de controlador de página y también actualizar el índice de control de página, por lo que esta fue la mejor y más directa solución para mí :
fuente
¿Qué pasa con el uso de métodos de dataSource?
Analógicamente para atrás.
fuente
En Swift :
fuente
Sin embargo, el uso de esta llamada al método 'self.pageViewController setViewControllers' no llama a 'viewDidDissapear' en viewController para la página que ha sido rechazada, mientras que al girar manualmente una página llama a viewDidDissapear en la página rechazada. Creo que esta es la causa de mi accidente.
"El número de controladores de vista proporcionados (0) no coincide con el número requerido (1) para la transición solicitada"
fuente
También necesitaba un botón para navegar hacia la izquierda en un PageViewController, uno que debería hacer exactamente lo que esperarías del movimiento de deslizamiento.
Como ya tenía algunas reglas dentro de " pageViewController: viewControllerBeforeViewController " para manejar la navegación de deslizamiento natural, quería que el botón reutilizara todo ese código, y simplemente no podía permitirme usar índices específicos para llegar a las páginas como el anterior las respuestas lo hicieron. Entonces, tuve que tomar una solución alternativa.
Tenga en cuenta que el siguiente código es para un controlador de vista de página que es una propiedad dentro de mi ViewController personalizado y tiene su columna vertebral configurada en la mitad.
Aquí está el código que escribí para mi botón Navegar a la izquierda:
Puede hacer algo muy similar para hacer un botón de navegación derecho desde aquí.
fuente
En caso de que el CONTROL DE PÁGINA indique que la página actual es O&&. Desea que las páginas naveguen mediante desplazamiento y también haciendo clic en los botones personalizados en Page ViewController, a continuación puede ser útil.
// Delegado llamado viewControllerAfterViewController cuando el usuario se desplaza a la página siguiente
}
}
// Lógica de botones personalizados (Anterior y siguiente)
}
}
fuente
// ahora llama a este método
[self moveToPage];
Espero que funcione :)
fuente
Para una sola página, acabo de editar la respuesta de @Jack Humphries
fuente
Como señaló @samwize, la forma de paginar es mediante el uso de
Así es como lo hice: tengo mi fuente de datos y el delegado separados. Puede llamar a este método y solo cambiar la vista "siguiente". Previamente debe aplicar las reglas de paginación. Es decir, debe verificar la dirección y el siguiente controlador. Si usa ese método con su fuente de datos personalizada, la matriz de controladores que está mostrando no cambiará (ya que usará una matriz personalizada en una subclase de NSObject).
Usando su propia fuente de datos, el método solo establece una nueva vista (con dirección específica). Ya que aún controlará las páginas que se mostrarán cuando deslice normalmente.
fuente
Estoy trabajando en ello desde ayer y finalmente lo hice. No pude usar totalmente la plantilla estándar, porque tengo tres viewControllers diferentes como vistas secundarias:
Necesitaba un botón de activación solo en el primer VC, así que agregué una propiedad para pageViewController y modelo:
Reescribí el método init del modelo para pasar el guión gráfico y pageViewController como parámetros, para poder configurarlos en mi VC1:
Finalmente, agregué una IBAction en mi vc1 para activar el método pageViewController setViewControllers: direction: animated: complete ::
Tenga en cuenta que no necesito encontrar índices de VC, mi botón me lleva a mi segundo VC, pero no es difícil obtener todos los índices y realizar un seguimiento de sus vistas secundarias:
¡Espero que te ayude!
fuente
Aquí hay una solución que usa los métodos UIPageViewControllerDataSource :
El código realiza un seguimiento del controlador de vista visualizado actual en el UIPageViewController .
Primero inicialice currentViewController en el controlador de vista inicial configurado para UIPageViewController .
A continuación, realizar un seguimiento de currentViewController en los UIPageViewControllerDelegate métodos: pageViewController: willTransitionToViewControllers: y pageViewController: didFinishAnimating: previousViewControllers: transitionCompleted: .
Por último, en el método de su elección (en el ejemplo siguiente se de - (IBAction) onNext: (id) del remitente ), se puede cambiar mediante programación al controlador anterior o siguiente mediante UIPageViewControllerDataSouce métodos pageViewController: viewControllerBeforeViewController: , pageViewController: viewControllerAfterViewController: para obtener el controlador de vista siguiente o anterior y navegue hasta él llamando a [self.pageViewController setViewControllers: @ [vc] direction: UIPageViewControllerNavigationDirectionForward animated: YES complete: nil];
fuente
Como los ViewControllers están incrustados en el PageViewController, todo lo que tiene que hacer es:
Ejemplo en Xamarin, pero funcionalmente similar a Swift, etc. El siguiente código estaría en el delegado Click Button en uno de los ViewControllers que se muestra como una página:
fuente