以编程方式添加 UIPageViewController

Add a UIPageViewController programmatically

我正在尝试以编程方式将 UIPageViewController 添加到自定义 UICollectionViewCell。在预期的结果中,我希望能够在 UICollectionViewCell 内的不同控制器之间滑动。这是我写的代码:

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
    }

我坚持要将 pageViewController 添加到 cell。如果我写 self.addSubview(pageViewController) 我会收到一条错误消息,告诉我该函数需要一个 UIView.

我还有另一个错误告诉我 class 不符合 protocol UIPageViewControllerDataSource

1.对于错误:函数需要 UIView.

override func awakeFromNib()
{
    super.awakeFromNib()
    //Your code..

    self.contentView.addSubview(pageViewController.view)
}

2。对于错误:class 不符合协议 UIPageViewControllerDataSource.

执行以下方法:

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

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

首先,您必须将 viewcontroller 的视图添加到单元格中,同时注意孩子 viewcontroller 的生命周期,例如:

pageViewController.willMove(toParentViewController: <cell's parent viewcontroller coming here>)
addSubview(pageViewController.view)
pageViewController.view.frame = bounds // Set the viewcontroller's view's size, or do it with constraints
pageViewController.didMove(toParentViewController: <same as above>)

之后你必须在单元格中实现这两个方法(我不建议在那里创建 viewcontrollers,但那是另一个话题)

func pageViewController(UIPageViewController, viewControllerBefore: UIViewController) -> UIViewController?

func pageViewController(UIPageViewController, viewControllerBefore: UIViewController) -> UIViewController?