我正在研究多个UICollectionViewController
,它们都以不同的布局显示相同的内容。
根据Apple的 CollectionViewTransition 示例应用程序和WWDC 2013的会话218,UICollectionViewController
有一个名为useLayoutToLayoutNavigationTransitions
的属性,它基本上通过插入'from'和'来处理导航过渡'集合视图的布局。
假设我有两个UICollectionViewControllers
名为 MasterCollectionViewController 和 DetailCollectionViewController 。当我从 MasterCollectionViewController 推送 DetailCollectionViewController 时,布局已正确更改,但集合视图仍使用在中声明的数据源的 MasterCollectionViewController
这对我来说是一个问题,因为在每个UICollectionViewController
中,我需要重新排列部分/项目配置。我尝试做的一个很好的例子是iOS 7上的Photos应用程序。该应用程序的第一个选项卡有三个视图控制器:年份,集合和时刻。这些视图控制器都显示相同的内容:照片。每个视图控制器之间的区别在于照片在节中的分组方式。部分分组是UICollectionViewDataSource
的责任,这是一个问题。
如果我遇到的useLayoutToLayoutNavigationTransitions
属性的行为属于正常行为,是否有办法以不同的方式实现我的目标?
任何帮助或评论都将不胜感激。
谢谢!
答案 0 :(得分:6)
我看到了同样的行为,并认为它不太理想。
这里的基本问题是在两个视图控制器之间共享/传递相同的UICollectionView
实例。我尝试尝试更改UICollectionView
的委托和数据源,但遇到了各种问题。
最后,我最终采用的解决方案是让主人UICollectionViewController
成为UINavigationController
的代表,实施:
– navigationController:willShowViewController:animated:
...使用它来切换controllerMode
属性,然后将switch语句添加到-collectionView:cellForItemAtIndexPath:
和-collectionView:didSelectItemAtIndexPath:
以在模式中提供所需的行为。我还在-setControllerMode:
添加了代码,以便在主视图控制器中执行任何所需的状态更改。
希望有所帮助!