在两个UICollectionViews之间初始化和切换

时间:2015-02-24 23:16:23

标签: ios uicollectionview

所以我有两个UICollectionViews,它们有不同类型的布局,不同类型的单元格,以及单元格中的不同数据,因此我决定制作两个单独的视图,而不是处理跟踪所有数据。

我在界面编辑器中创建了几乎所有的UI,所以我的UICollectionViews(我们称之为NewsCollectionView和ExploreCollectionView)以及我的所有单元格都有.xib文件。两个.xib文件通过Interface Builder中的FilesOwner属性连接到其控制器。

我还有一个主视图(让我们称之为HomeViewController)有一个tabBar,我想用它来切换我的两个UICollectionViews。我的第一个问题很简单,如何从NIB初始化我的一个UICollectionView?

这就是我想象的方式(在我的HomeViewController中)

@property (strong, nonatomic) NewsCollectionView *newsCollectionView;
@property (strong, nonatomic) ExploreCollectionView *exploreCollectionView;

- (void)viewDidLoad {

[super viewDidLoad];
NSArray *arrayOfViews = [[NSBundle mainBundle] loadNibNamed:@"NewsCollectionView" owner:self options:nil];
self.newsCollectionView = [arrayOfViews objectAtIndex:0];


[self.view addSubview:self.newsCollectionView];

该代码的结果是一条消息,指出“无法将自己添加为子视图”。

我的第二个问题是关于在两个collectionView之间切换。我想它会是这样的:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{


if(item == newsEventsTab)
{
    [UIView transitionFromView:self.exploreCollectionView
                     toView:self.newsCollectionView
                   duration:0.25
                    options:UIViewAnimationTransitionFlipFromRight
                 completion:nil];
}
if(item == exploreTab)
{
    [UIView transitionFromView:self.newsCollectionView
                     toView:self.exploreCollectionView
                   duration:0.25
                    options:UIViewAnimationTransitionFlipFromRight
                 completion:nil];
}    
}

但是我不知道这是否有效,因为我甚至无法让视图显示出来。请帮帮我,谢谢!

1 个答案:

答案 0 :(得分:0)

我最终通过在HomeViewController中创建一个containerView并通过IBOutlet连接来完成我的任务。

为了设置我的集合视图,我这样做了:

self.newsCollectionView = [[NewsCollectionView alloc] initWithNibName:@"NewsCollectionView" bundle:nil];
self.newsCollectionView.view.frame = self.collectionContainer.bounds;
self.exploreCollectionView = [[ExploreCollectionView alloc] initWithNibName:@"ExploreCollectionView" bundle:nil];
self.exploreCollectionView.view.frame = self.collectionContainer.bounds;

[self addChildViewController:self.newsCollectionView];
[self addChildViewController:self.exploreCollectionView];

[self.collectionContainer addSubview:self.newsCollectionView.view];

[self.newsCollectionView didMoveToParentViewController:self];
[self.exploreCollectionView didMoveToParentViewController:self];

视图转换是我在原始帖子中描述的,除了你必须引用实际视图而不是控制器(所以self.newsCollectionView.view而不仅仅是self.newsCollectionView)。

像魅力一样工作。