Search code examples
iosswiftcollectionsuipageviewcontroller

Add a UIPageViewController programmatically


I am trying to add a UIPageViewController programmatically to a custom UICollectionViewCell. At expected result I want to be able to swipe between different controllers inside the UICollectionViewCell. This is the code I wrote:

import UIKit

class SlidingCellCell : UICollectionViewCell, UIPageViewControllerDataSource, UIPageViewControllerDelegate{


    var pages = [UIViewController]()
    let pageControl = UIPageControl()
    let pageViewController = UIPageViewController()

    override func awakeFromNib() {
        super.awakeFromNib()

        pageViewController.dataSource = self
        pageViewController.delegate = self
        let initialPage = 0
        let page1 = myViewController1()
        let page2 = myViewController1()
        let page3 = myViewController1()
        self.pages.append(page1)
        self.pages.append(page2)
        self.pages.append(page3)
        pageViewController.setViewControllers([pages[initialPage]], direction: .forward, animated: true, completion: nil)
        pageViewController.view.frame = self.frame
    }

I am stuck on adding pageViewController to the cell. If I write self.addSubview(pageViewController) I get an error telling me that the function is expecting a UIView.

I also have another error telling me that the class dose not conform the protocol UIPageViewControllerDataSource.


Solution

  • 1. For Error: function is expecting a UIView.

    override func awakeFromNib()
    {
        super.awakeFromNib()
        //Your code..
    
        self.contentView.addSubview(pageViewController.view)
    }
    

    2. For Error: class dose not conform the protocol UIPageViewControllerDataSource.

    Implement the below methods:

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?
    {
        //TODO:
    }
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?
    {
        //TODO:
    }