Tengo UIPageViewController con 3 UIViewControllers ("FirstVC", "SecondVC", "ThirdVC"). ViewControllers cambia por desplazamiento, pero necesito cambiarlo haciendo clic en UIButtons.

¿Como puedo hacer esto?

¿Quizás alguna función, en la que VC se configurará por StoryboardID?

Gracias por todas las respuestas!

0
Golovanov Dmitrii 14 feb. 2018 a las 15:17

2 respuestas

La mejor respuesta

Puede navegar fácilmente mediante programación a través de las páginas de un UIPageViewController usando:

setViewControllers([targetPage], direction: .forward, animated: true, completion: nil)

En el caso de que tenga un UIPageViewController incrustado en un ContainerView y desee botones en la vista "raíz" para controlar el controlador de vista de página, el proceso básico es:

  • agregue métodos de navegación (funcs) a su clase de controlador de vista de página
  • guardar una referencia al controlador de vista de página cuando se carga
  • sus botones llaman a las funciones de navegación usando esa referencia

Cuando sus controladores de vista "raíz" cargan y crean una instancia del controlador de vista que está incrustado en su ContainerView, llama a prepare(for segue:...), que es donde obtiene su referencia.

En Storyboard, donde incrusta su controlador de vista en ContainerView, verá una conexión estándar "segue". En el Inspector de atributos, dale a ese segue un identificador, como "PageControllerEmbedSegue".

En su clase de controlador raíz, agregue una var a nivel de clase:

var myPageVC: BasicPageViewController?

Y en prepare():

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    // get a reference to the embedded PageViewController on load
    if let vc = segue.destination as? BasicPageViewController,
        segue.identifier == "PageControllerEmbedSegue" {
        self.myPageVC = vc
    }

}

Ahora, puede llamar a funciones / obtener propiedades de su controlador de vista integrado.

Tengo un ejemplo completo en GitHub: https://github.com/DonMag/EmbeddedPageView

1
DonMag 15 feb. 2018 a las 14:44

Hay un par de formas. Puede agregar un segue en el archivo Storyboard y llamar

performSegue(withIdentifier: "toResponseTime", sender: self)

De lo contrario, podrías hacer algo como.

    let controller = self.storyboard!.instantiateViewController(withIdentifier: "AngelDetailViewController") as! AngelDetailViewController

    self.navigationController!.pushViewController(controller, animated: true)
0
Jake 14 feb. 2018 a las 12:19