Question

Je travaille sur plusieurs UICollectionViewControllers qui montrent tous le même contenu avec différentes mises en page.

Selon Apple CollectionViewTransition Exemple d'application et de session 218 de la WWDC 2013, UICollectionViewController a une propriété appelée useLayoutToLayoutNavigationTransitions Cela gère essentiellement les transitions de navigation en interpolant «de» et «vers» les mises en page de la vue de la collection.

Supposons que j'en ai deux UICollectionViewControllers appelé MasterCollectionViewController et DetailCollectionViewController. Quand je pousse DetailCollectionViewController de MasterCollectionViewController, la mise en page est correctement modifiée, mais la vue de collecte utilise toujours la source de données déclarée dans MasterCollectionViewController.

C'est un problème pour moi, car dans chacun des UICollectionViewControllerS, j'ai besoin de réorganiser les configurations de section / élément. Un bon exemple de ce que j'essaie de faire est l'application de photos sur iOS 7. Le premier onglet de cette application a trois contrôleurs de vue: années, collections et moments. Ce contrôleur de vue montre tous le même contenu: les photos. Ce qui est différent entre chaque contrôleur de vue, c'est comment les photos sont regroupées en section. Et le regroupement de sections est la responsabilité de UICollectionViewDataSource ce qui est un problème ici.

Si le comportement de useLayoutToLayoutNavigationTransitions La propriété que je ressens est un comportement normal, y a-t-il un moyen d'atteindre mon objectif dans une approche différente?

Toute aide ou commentaire serait apprécié.

Merci!

Était-ce utile?

La solution

Je vois le même comportement et je suis d'accord que c'est loin d'être idéal.

Le problème fondamental ici est que le même UICollectionView L'instance est partagée / passée entre les deux contrôleurs de vue. J'ai expérimenté en essayant de changer le délégué et l'ourlet de données du UICollectionView mais a rencontré divers problèmes.

En fin de compte, la solution que j'ai fini par adopter était de faire du maître UICollectionViewController un délégué du UINavigationController, Implémentation:

– navigationController:willShowViewController:animated:

... en utilisant ceci pour changer un controllerMode propriété, puis ajoutant des instructions de commutation à -collectionView:cellForItemAtIndexPath: et -collectionView:didSelectItemAtIndexPath: pour fournir le comportement requis dans le mode. J'ai également ajouté du code à -setControllerMode: Pour effectuer les modifications d'état requises dans le contrôleur Master View.

J'espère que cela pourra aider!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top