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