2013-11-07 1 views
7

Я работаю над несколькими UICollectionViewController s, которые показывают одинаковое содержимое с различными макетами.UICollectionViewController Layout-to-Layout Навигационные переходы

Согласно CollectionViewTransition приложения образца от Apple и сессий 218 WWDC 2013, UICollectionViewController имеет свойство useLayoutToLayoutNavigationTransitions, что в основном обрабатывает навигационные переходы интерполяции «от» и «до» раскладок коллекции вида.

Давайте предположим, что у меня есть два UICollectionViewControllers называется MasterCollectionViewController и DetailCollectionViewController. Когда я нажимаю DetailCollectionViewController из MasterCollectionViewController, расположение правильно изменилось, но вид коллекции до сих пор использует источник данных, объявленный в MasterCollectionViewController.

Это проблема для меня, потому что в каждом из UICollectionViewController s мне нужно изменить порядок разделов/элементов. Хорошим примером того, что я пытаюсь сделать, является приложение «Фотографии» на iOS 7. Первая вкладка этого приложения имеет три контроллера вида: годы, коллекции и моменты. Эти контроллеры просмотра показывают одинаковое содержимое: фотографии. Разница между каждым контроллером представления заключается в том, как группировать фотографии в разделе. И раздел группировки несет ответственность за UICollectionViewDataSource, что является проблемой здесь.

Если поведение свойства useLayoutToLayoutNavigationTransitions, которое я испытываю, является нормальным поведением, есть ли способ достичь моей цели в разных подходах?

Любая помощь или комментарий будут оценены.

Спасибо!

ответ

6

Я наблюдаю то же поведение и соглашаюсь, что это меньше, чем идеально.

Основная проблема заключается в том, что один и тот же экземпляр UICollectionView совместно используется/передается между двумя контроллерами представления. Я экспериментировал с попыткой изменить делегат и источник данных UICollectionView, но столкнулся с различными проблемами.

В конце концов, решение, которое я в конечном итоге принятие было сделать мастер UICollectionViewController делегат UINavigationController, реализации:

– navigationController:willShowViewController:animated:

... используя это, чтобы переключить controllerMode свойство, а затем добавить операторы переключения на -collectionView:cellForItemAtIndexPath: и -collectionView:didSelectItemAtIndexPath:, чтобы обеспечить требуемое поведение в режиме. Я также добавил код в -setControllerMode: для выполнения любых необходимых изменений состояния в контроллере главного представления.

Надеюсь, что это поможет!

+0

Вы пытались изменить количество разделов и количество элементов в разделе, соответствующих вашему свойству controllerMode, случайно? – JYC

+0

In -setControllerMode :, я использовал [UICollectionView performBatchUpdates:], чтобы обновить количество элементов и разделов. Я ценю это! – JYC

+0

Да, в моем приложении есть разные номера разделов в двух режимах, хотя я использую более ядерный '- [UICollectionView reloadData]' для принудительного полного обновления. –