2017-03-01 1 views
0

J'ai 2 UIViewControllers comme éléments de UIPageViewController. Cela fonctionne bien pour la diapositive, mais je veux passer de pageOne à pageTwo avec l'action du bouton. Comment je peux faire ça?Transition entre View Controllers avec le bouton (éléments UIPageViewController)

Voici mon code et l'aperçu storyboard:

Contenu de Pager.swift:

import UIKit 

class Pager: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource, UIScrollViewDelegate 
{ 
var viewsArray: [UIViewController] = [] 

var pageOne: UIViewController = UIViewController() 
var pageTwo: UIViewController = UIViewController() 

var currentIndex = 0 
var previousIndex = 0 
var nextIndex = 0 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    self.delegate = self 
    self.dataSource = self 

    pageOne = (storyboard?.instantiateViewController(withIdentifier: "pageOne"))! 
    pageTwo = (storyboard?.instantiateViewController(withIdentifier: "pageTwo"))! 

    viewsArray.append(pageOne) 
    viewsArray.append(pageTwo) 

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

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
{ 
    currentIndex = viewsArray.index(of: viewController)! 
    if currentIndex == 1 
    { 
     return nil 
    } 
    else 
    { 
     nextIndex = abs((currentIndex + 1) % viewsArray.count) 
     return viewsArray[nextIndex] 
    } 
} 

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
{ 
    currentIndex = viewsArray.index(of: viewController)! 
    if currentIndex == 0 
    { 
     return nil 
    } 
    else 
    { 
     previousIndex = abs((currentIndex - 1) % viewsArray.count) 
     return viewsArray[previousIndex] 
    } 
} 


func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int 
{ 
    return viewsArray.count 
} 

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int 
{ 
    return 0 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
} 
} 

Contenu du PageOne.swift:

import UIKit 

class PageOne: UIViewController 
{ 
var pager = Pager() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 
} 

override func didReceiveMemoryWarning() 
{ 
    super.didReceiveMemoryWarning() 
} 

@IBAction func forwardButton(_ sender: Any) 
{ 
    pager.setViewControllers([pager.pageOne], direction: .forward, animated: true, completion: nil) 
} 
} 

enter image description here

Répondre

0

Vous devez écrire sous la ligne

pageController?.setViewControllers([YOUR_VIEW_CONTROLLER], direction: direction, animated: true, completion: nil) 

donnent la bonne direction avant ou arrière en fonction de contrôleur que vous êtes à

espère que cela vous aidera

Vous devez passer téléavertisseur à vos deux viewcontrollers

pageOne.pager = self 
pageTwo.pager = self 
+0

Comme ça? @IBAction func forwardButton (_ expéditeur: Tous) { pager.setViewControllers ([pager.pageOne], direction: .forward, animation: true, achèvement: néant) } --- J'ai corps mise à jour question –

+0

C'est la bonne solution? –

+0

oui vous pouvez faire comme ça –