2017-09-24 7 views
0

私は、私がストーリーボードで作成した5つのView Controllerを含むUIPageViewControllerを設定しました。ページはスワイプジェスチャーでうまく変化しますが、ユーザーがビューコントローラーの1つのボタンをタップした後にページを変更したいとします。私は私のビューコントローラの一つで、ここIBActionでnextPageWithIndexメソッドを呼び出すUIPageViewControllerでページが変更されないのはなぜですか?

// PageVC.swift 

import Foundation 
import UIKit 

class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var VCArr: [UIViewController] = { 
     return [self.VCInstance(name: "OB1"), 
       self.VCInstance(name: "OB2"), 
       self.VCInstance(name: "OB3"), 
       self.VCInstance(name: "OB4"), 
       self.VCInstance(name: "OB5"), 
       self.VCInstance(name: "OB6")] 
    }() 

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

    } 

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

    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 OB1 = viewControllers?.first, 
      let OB1Index = VCArr.index(of: OB1) else { 
       return 0 

     } 

     return OB1Index 
    } 

    public func nextPageWithIndex(index: Int) 
    { 
     let nextVC = VCArr[index] 
     setViewControllers([nextVC], direction: .forward, animated: true, completion: nil) 

    } 


} 

:ここに私のコードは、私はそれから印刷することができる午前として、

// OB1.swift 

import UIKit 

class OB1: UIViewController { 
    @IBOutlet var getStartedColorChange: UIButton! 


    override func viewDidLoad() { 
     super.viewDidLoad() 



    } 

    @IBAction func getStartedBtn(_ sender: Any) { 

     let getStarted = PageVC() 
     getStarted.nextPageWithIndex(index: 2) 

    } 

} 

ボタンの動作が、ページ変更されていません。ボタンを使用してページを変更するには、何を変更する必要がありますか?

答えて

2

問題は、あなたのコード内でPageVCの新しいインスタンスを()である:

let getStarted = PageVC() 

あなたは既に作成した親コントローラへの参照を取得する必要があります!

@IBAction func getStartedBtn(_ sender: Any) { 
     let getStarted = self.parent as! PageVC 
     getStarted.nextPageWithIndex(index: 2) 
    } 
関連する問題