Pergunta

Estou trabalhando em múltiplos UICollectionViewControllerS que mostram o mesmo conteúdo com layouts diferentes.

De acordo com a Apple's CollectionViewTransition Aplicação de amostra e sessão 218 da WWDC 2013, UICollectionViewController tem uma propriedade chamada useLayoutToLayoutNavigationTransitions Isso basicamente lida com transições de navegação interpolando 'de' e 'para' Layouts da coleção View.

Vamos supor que eu tenha dois UICollectionViewControllers chamado MasterCollectionViewController e DetalheCollectionViewController. Quando eu empurro DetalheCollectionViewController a partir de MasterCollectionViewController, o layout é alterado corretamente, mas a visualização da coleção ainda usa a fonte de dados declarada em MasterCollectionViewController.

Isso é um problema para mim, porque em cada um de UICollectionViewControllerS, preciso reorganizar as configurações da seção/item. Um bom exemplo do que estou tentando fazer é o aplicativo de fotos no iOS 7. A primeira guia deste aplicativo possui três controladores de exibição: anos, coleções e momentos. Estes controladores de exibição mostram o mesmo conteúdo: fotos. O que é diferente entre cada controlador de exibição é como as fotos são agrupadas na seção. E o agrupamento de seções é de responsabilidade de UICollectionViewDataSource o que é um problema aqui.

Se o comportamento de useLayoutToLayoutNavigationTransitions A propriedade que estou experimentando é um comportamento normal, existe uma maneira de atingir meu objetivo em uma abordagem diferente?

Qualquer ajuda ou comentário seria apreciado.

Obrigado!

Foi útil?

Solução

Estou vendo o mesmo comportamento e concordo que é menos do que o ideal.

A questão fundamental aqui é que o mesmo UICollectionView A instância é compartilhada/passada entre os dois controladores de exibição. Eu experimentei de tentar mudar o delegado e a fonte de dados do UICollectionView mas encontrou vários problemas.

No final, a solução que acabei adotando foi fazer o mestre UICollectionViewController um delegado do UINavigationController, implementando:

– navigationController:willShowViewController:animated:

... usando isso para mudar de controllerMode propriedade e depois adicionar declarações de switch a -collectionView:cellForItemAtIndexPath: e -collectionView:didSelectItemAtIndexPath: para fornecer o comportamento necessário no modo. Eu também adicionei código para -setControllerMode: Para fazer todas as alterações estaduais necessárias no controlador Master View.

Espero que ajude!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top