我有一个处于工作状态的应用程序,其中我有三个屏幕1,2,3每个屏幕都与UICollectionView
相关联,这是以编程方式创建的,现在我想修改当前的实现&将这些集合视图添加到UIPageViewControllers。
我尝试使用CollectionViews找到许多与PageViewController相关的教程,但却无法找到任何内容。任何人都可以帮我实现这一点,或者可以给我一个与此相关的参考。
我也提到了this tutorial,但对我来说运气不好:(
答案 0 :(得分:1)
您可以通过以下方式执行此操作:
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
子类的源代码here
答案 1 :(得分:1)
只需按照其中一些页面视图控制器教程,当您到达实例化子视图控制器时,请创建这些子视图控制器。就像在使用UIImageView
的示例教程中一样,尝试将其替换为UICollectionViews
&amp;你会实现你想要的。
告诉你是否面临任何困难。 快乐的编码!
答案 2 :(得分:0)
我最近遇到了类似的情况。我永远无法让嵌入的UICollectionView
完全按照UIPageViewController
的要求工作。我也觉得实现过于复杂,每个UICollectionView
需要一个单独的视图控制器。我觉得这不适合我的数据集。
我的解决方案是使用单个UIViewController
和一个水平滚动的分页UICollectionView
来处理分页。然后我为每个页面添加了垂直滚动UICollectionView
以包含我的内容。我还添加了一个包含UIPageControl
的叠加层,该叠加层已用于滚动位置数据以模拟页面指示符。这极大地简化了我的视图控制器与数据源的关系,更容易定制,并允许更好的控制。
(我会发布消息来源,但代码属于我的雇主,我使用了故事板。)