2017-09-24 83 views
0

我有一个UIPageViewController设置包含5个视图控制器,我在故事板中创建。使用滑动手势页面更改得很好,但我希望页面在用户点击其中一个视图控制器内的按钮后进行更改。这里是我的代码:为什么页面在我的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) 

    } 


} 

我这里所说的nextPageWithIndex方法在IBAction为我的视图控制器之一:

// 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) 
    } 
相关问题