在当前的应用程序添加UIPageViewController

我有一个应用程序在工作状态,其中我有三个屏幕1,2,3每个屏幕与UICollectionView关联,这是编程创build现在我想修改当前实现并将这些集合视图添加到UIPageViewControllers。

我试图用CollectionViewsfind许多与PageViewController有关的教程,但是无法find任何东西。 任何人都可以帮我实施这个或可以给我一个相关的参考。

我也提到了这个教程 ,但对我来说运气不佳:(

只要按照其中的一些页面视图控制器教程,当你到了实例化子视图控制器的时候,使这些子视图控制器集合。 就像在你的示例教程中使用UIImageView尝试用UICollectionViewsreplace它,你将实现你想要的。

请告诉你是否遇到任何困难。 快乐编码!

你可以这样做:

1) UIPageViewController并符合UIPageViewControllerDataSource协议。 数据源将告诉pageViewController哪些视图控制器将在下一个或当前的视图控制器出现之前。

2)在viewDidLoad() ,将dataSource设置为self以便调用委托方法。 另外,调用self.setViewControllers([collectionViewController], direction: .Forward, animated: true, completion: nil)collectionViewController将是一个数组,填充1个视图控制器(第一个视图控制器)。

例:

 override func viewDidLoad() { super.viewDidLoad() dataSource = self //so our delegate methods get called //use tags to reference each controller let collectionViewOne = TestCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) collectionViewOne.view.tag = 0 let collectionViewTwo = TestCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) collectionViewTwo.view.tag = 1 let collectionViewThree = TestCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout()) collectionViewThree.view.tag = 2 collectionViewControllers = [collectionViewOne, collectionViewTwo, collectionViewThree] self.setViewControllers([collectionViewOne], direction: .Forward, animated: true, completion: nil) } 

3)实现UIPageViewControllerDataSource方法:

 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { var index = viewController.view.tag if index == 0 { return nil } if index > 0 { index-- } return collectionViewControllers[index] as? TestCollectionViewController } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { var index = viewController.view.tag if index == 2 { return nil } if index < collectionViewControllers.count - 1 { index++ } return collectionViewControllers[index] as? TestCollectionViewController } 

如果索引将呈现出界限视图控制器,则返回nil

TestCollectionViewControllerUIPageViewController子类的源代码可以在这里find

最近我遇到了类似的情况。 我永远不能让embedded的UICollectionViewUIPageViewController 。 我也觉得这个实现过于复杂,每个UICollectionView需要一个单独的视图控制器。 我不觉得这是适合我的数据集。

我的解决scheme是使用单个UIViewController与水平滚动,分页的UICollectionView来处理分页。 然后我为每个页面添加了垂直滚动的UICollectionView来包含我的内容。 我还添加了一个覆盖,其中包含一个UIPageControl ,它提供滚动位置数据来模拟页面指示器。 这大大简化了我的视图控制器到数据源的关系,更容易定制,并允许更大的控制。

(我会张贴来源,但代码属于我的雇主,我用故事板。)