2017-08-10 44 views
0

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

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到单元格。如果我写self.addSubview(pageViewController)我得到一个错误,告诉我该函数期待UIView。

我也有另一个错误告诉我,该类不符合协议UIPageViewControllerDataSource。

回答

0

1.对于错误:函数期望UIView

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

    self.contentView.addSubview(pageViewController.view) 
} 

2.对于错误:类剂量不符合协议UIPageViewControllerDataSource

实现以下方法:

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

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

首先,你必须到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>) 

在此之后,childviewcontroller的生命周期护理你必须在单元中实现这两种方法(我不建议在那里创建视图控制器,但这是另一个主题)

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

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