2017-08-10 25 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?