2016-12-13 5 views
0

私はページビューコントローラを持っています(下記参照)。私が達成したいのは、ThirdVCからFirstVCに行くことだけです。誰かが私を助けることができますか?特定のページを変更するUiPageViewController

ここでは、私はここに解決策た私のPageVC

import UIKit 

class PageVC: UIPageViewController,UIPageViewControllerDataSource, UIPageViewControllerDelegate{ 

    lazy var VCArr: [UIViewController] = { 
     return [self.VCInstance(name: "FirstVC"), self.VCInstance(name: "SecondVC"), self.VCInstance(name: "ThirdVC")] 
      }() 

    private func VCInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "Main", bundle:nil).instantiateViewController(withIdentifier: name) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self 
     self.delegate = self 
     if let firstVC = VCArr.first { 
      setViewControllers([firstVC], direction: .forward, animated: true, completion: nil) 
     } 
    } 


    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     for view in self.view.subviews { 
      if view is UIScrollView { 
       view.frame = UIScreen.main.bounds 
      } else if view is UIPageControl { 
       view.backgroundColor = UIColor.clear 
      } 
     } 
    } 

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = VCArr.index(of: viewController) else { 
      return nil 
     } 
     let previousIndex = viewControllerIndex - 1 

     guard previousIndex >= 0 else{ 
      return VCArr.last 
     } 

     guard VCArr.count > previousIndex else { 
      return nil 
     } 
     return VCArr[previousIndex] 
    } 

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = VCArr.index(of: viewController) else { 
      return nil 
     } 
     let nextIndex = viewControllerIndex + 1 

     guard nextIndex < VCArr.count else{ 
      return VCArr.first 
     } 

     guard VCArr.count > nextIndex else { 
      return nil 
     } 
     return VCArr[nextIndex] 
    } 

    public func presentationCount(for pageViewController: UIPageViewController) -> Int { 
     return VCArr.count 
    } 


    public func presentationIndex(for pageViewController: UIPageViewController) -> Int { 
     guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = VCArr.index(of: firstViewController) else{ 
      return 0 
     } 
     return firstViewControllerIndex 
    } 

} 

答えて

0

オクラホマのコードを参照することができます:私は私の機能に追加ThirdVCビューコントローラで次に

How do I change the UIPageViewController from WITHIN one of the UIViewControllers that is part of the UIPageViewController?

Simply i added this function to PageVC: 
func nextPageWithIndex(index: Int) 
    { 

     let nextWalkthroughVC = VCArr[index] 
     setViewControllers([nextWalkthroughVC], direction: .forward, animated: true, completion: nil) 

    } 

を:

let parent = self.parent as! PageVC 

     parent.nextPageWithIndex(index: 0) 

ここで0は表示したいビューコントローラのインデックスです

そして、完璧に動作します。

関連する問題