在当前的应用程序添加UIPageViewController
我有一个应用程序在工作状态,其中我有三个屏幕1,2,3每个屏幕与UICollectionView
关联,这是编程创build现在我想修改当前实现并将这些集合视图添加到UIPageViewControllers。
我试图用CollectionViewsfind许多与PageViewController有关的教程,但是无法find任何东西。 任何人都可以帮我实施这个或可以给我一个相关的参考。
我也提到了这个教程 ,但对我来说运气不佳:(
只要按照其中的一些页面视图控制器教程,当你到了实例化子视图控制器的时候,使这些子视图控制器集合。 就像在你的示例教程中使用UIImageView
尝试用UICollectionViews
replace它,你将实现你想要的。
请告诉你是否遇到任何困难。 快乐编码!
你可以这样做:
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
TestCollectionViewController
和UIPageViewController
子类的源代码可以在这里find
最近我遇到了类似的情况。 我永远不能让embedded的UICollectionView
在UIPageViewController
。 我也觉得这个实现过于复杂,每个UICollectionView
需要一个单独的视图控制器。 我不觉得这是适合我的数据集。
我的解决scheme是使用单个UIViewController
与水平滚动,分页的UICollectionView
来处理分页。 然后我为每个页面添加了垂直滚动的UICollectionView
来包含我的内容。 我还添加了一个覆盖,其中包含一个UIPageControl
,它提供滚动位置数据来模拟页面指示器。 这大大简化了我的视图控制器到数据源的关系,更容易定制,并允许更大的控制。
(我会张贴来源,但代码属于我的雇主,我用故事板。)