具有不同数据源的布局之间的UICollectionView转换

时间:2014-06-25 20:52:38

标签: ios uicollectionview

我一直在努力解决布局,视图控制器,集合视图和动画之间的转换。我现在的目标只是复制iOS Photos应用程序的一些功能:从具有多个堆栈的视图转换到仅具有1个堆栈的视图的视图。

所以我设置了一个包含4个堆栈的集合视图。您可以通过点击或捏合它们来转换到LineLayout。对我来说,棘手的部分是CollectionViewController与一个数据源(通知所有4个部分)与另一个数据源(仅显示一个部分)之间的转换。

以下是辅助方法中的转换代码:

- (UICollectionViewController *)nextViewControllerForIndexPath: (NSIndexPath *)indexPath
{
    LineLayout *layout = [[LineLayout alloc] init];

    APLGridCollectionViewController *nextCollectionViewController =
    [[APLGridCollectionViewController alloc] initWithCollectionViewLayout:layout];
    nextCollectionViewController.collectionView = self.collectionView;
    nextCollectionViewController.collectionView.dataSource = nextCollectionViewController;
    nextCollectionViewController.selectedSection = indexPath.section;

    nextCollectionViewController.useLayoutToLayoutNavigationTransitions = YES;

    nextCollectionViewController.title = @"Line Layout";

    return nextCollectionViewController;
}

如果我没有将nextCollectionViewController的collectionView设置为self,则dataSource将保持设置为当前的CollectionViewController,并在下一个屏幕中显示所有4个部分及其单元格。

当前实现的问题是我得到以下异常:

2014-06-25 13:37:00.774 CollectionViewTransition[743:142104] *** Assertion failure in -[UICollectionViewData numberOfItemsBeforeSection:], /SourceCache/UIKit/UIKit-3232.3/UICollectionViewData.m:556
2014-06-25 13:37:00.775 CollectionViewTransition[743:142104] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'request for number of items before section 3 when there are only 1 sections in the collection view'

...暗示它在某处使用旧数据。那么,这样做的正确方法是什么?

不可否认,我正在尝试处理其他几个问题,例如回到堆栈布局屏幕将所有内容设置为一个堆栈,以及一些EXC_BAD_ACCESS事件,但我不会问7问题一下子。

Here's the project.这是我修改过的WWDC示例代码,就像最初的尝试一样。

0 个答案:

没有答案