UICollectionViewController布局到布局导航转换

时间:2013-11-07 17:45:19

标签: ios navigation uicollectionview transitions

我正在研究多个UICollectionViewController,它们都以不同的布局显示相同的内容。

根据Apple的 CollectionViewTransition 示例应用程序和WWDC 2013的会话218,UICollectionViewController有一个名为useLayoutToLayoutNavigationTransitions的属性,它基本上通过插入'from'和'来处理导航过渡'集合视图的布局。

假设我有两个UICollectionViewControllers名为 MasterCollectionViewController DetailCollectionViewController 。当我从 MasterCollectionViewController 推送 DetailCollectionViewController 时,布局已正确更改,但集合视图仍使用在中声明的数据源的 MasterCollectionViewController

这对我来说是一个问题,因为在每个UICollectionViewController中,我需要重新排列部分/项目配置。我尝试做的一个很好的例子是iOS 7上的Photos应用程序。该应用程序的第一个选项卡有三个视图控制器:年份,集合和时刻。这些视图控制器都显示相同的内容:照片。每个视图控制器之间的区别在于照片在节中的分组方式。部分分组是UICollectionViewDataSource的责任,这是一个问题。

如果我遇到的useLayoutToLayoutNavigationTransitions属性的行为属于正常行为,是否有办法以不同的方式实现我的目标?

任何帮助或评论都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:6)

我看到了同样的行为,并认为它不太理想。

这里的基本问题是在两个视图控制器之间共享/传递相同的UICollectionView实例。我尝试尝试更改UICollectionView的委托和数据源,但遇到了各种问题。

最后,我最终采用的解决方案是让主人UICollectionViewController成为UINavigationController的代表,实施:

– navigationController:willShowViewController:animated:

...使用它来切换controllerMode属性,然后将switch语句添加到-collectionView:cellForItemAtIndexPath:-collectionView:didSelectItemAtIndexPath:以在模式中提供所需的行为。我还在-setControllerMode:添加了代码,以便在主视图控制器中执行任何所需的状态更改。

希望有所帮助!