Pregunta

Estoy trabajando en múltiples UICollectionViewControllerS que muestran el mismo contenido con diferentes diseños.

Según Apple's CollectionViewTransition Aplicación de muestra y sesión 218 de WWDC 2013, UICollectionViewController tiene una propiedad llamada useLayoutToLayoutNavigationTransitions Eso básicamente maneja las transiciones de navegación interpolando los diseños de 'y' a 'de la colección.

Supongamos que tengo dos UICollectionViewControllers llamó MasterCollectionViewController y DetellCollectionViewController. Cuando empuje DetellCollectionViewController de MasterCollectionViewController, el diseño se cambia correctamente, pero la vista de recopilación todavía usa la fuente de datos declarada en MasterCollectionViewController.

Este es un problema para mí, porque en cada uno de los UICollectionViewControllerS, necesito reorganizar las configuraciones de sección/elemento. Un buen ejemplo de lo que estoy tratando de hacer es la aplicación de fotos en iOS 7. La primera pestaña de esta aplicación tiene tres controladores de vista: años, colecciones y momentos. Todos estos controladores muestran el mismo contenido: fotos. Lo que es diferente entre cada controlador de vista es cómo se agrupan las fotos en la sección. Y la agrupación de la sección es responsabilidad de UICollectionViewDataSource que es un problema aquí.

Si el comportamiento de useLayoutToLayoutNavigationTransitions La propiedad que estoy experimentando es un comportamiento normal, ¿hay alguna manera de lograr mi objetivo en un enfoque diferente?

Cualquier ayuda o comentario sería apreciado.

¡Gracias!

¿Fue útil?

Solución

Veo el mismo comportamiento y estoy de acuerdo en que es menos que ideal.

El problema fundamental aquí es el mismo UICollectionView La instancia se comparte/se pasa entre los dos controladores de vista. Experimenté tratando de cambiar el delegado y la fuente de datos del UICollectionView pero se encontró con varios problemas.

Al final, la solución que terminé adoptando fue hacer el maestro UICollectionViewController un delegado del UINavigationController, implementar:

– navigationController:willShowViewController:animated:

... usando esto para cambiar un controllerMode propiedad y luego agregar declaraciones de conmutación a -collectionView:cellForItemAtIndexPath: y -collectionView:didSelectItemAtIndexPath: Para proporcionar el comportamiento requerido en el modo. También agregué código a -setControllerMode: Para hacer cualquier cambio de estado requerido en el controlador de vista maestra.

¡Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top