Skip to content

Page ViewController in container

Mohammad Azmal Hossain edited this page Sep 19, 2017 · 1 revision

class MyPageViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

let container = UIView()

var pageController: UIPageViewController!

let vc = PurpleViewController()
let vc2 = GreenViewController()
let vc3 = OrangeViewController()

var controllers = [UIViewController]()

override func viewDidLoad() {
    super.viewDidLoad()
    
    container.frame = CGRect(x: 10, y: 120, width: self.view.frame.size.width , height: self.view.frame.size.height)
    self.view.addSubview(container)
    
    container.backgroundColor = .yellow
    
    
    
    pageController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
    pageController.dataSource = self
    pageController.delegate = self
    
    
    
    
    self.addChildViewController(pageController)
    self.container.addSubview(pageController.view)
    pageController.didMove(toParentViewController: self)
    
    
    
    
    let views = ["pageController": pageController.view] as [String: AnyObject]
    view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[pageController]|", options: [], metrics: nil, views: views))
    view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[pageController]|", options: [], metrics: nil, views: views))
    
    
    controllers.append(vc)
    controllers.append(vc2)
    controllers.append(vc3)
    
    pageController.setViewControllers([vc], direction: .forward, animated: false)
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    if let index = controllers.index(of: viewController) {
        if index > 0 {
            return controllers[index - 1]
        } else {
            return nil
        }
    }
    
    return nil
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    if let index = controllers.index(of: viewController) {
        if index < controllers.count - 1 {
            return controllers[index + 1]
        } else {
            return nil
        }
    }
    
    return nil
}

}

class GreenViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    
    view.backgroundColor = .green
    
}

}

class OrangeViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    
    
    view.backgroundColor = .orange
    
}

}

class PurpleViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .purple
    
}

}

Clone this wiki locally