两个 UICollectionView 的初始化和切换
Initializing and switching between two UICollectionViews
所以我有两个 UICollectionViews,它们具有不同类型的布局、不同类型的单元格以及单元格中的不同数据,因此我决定制作两个单独的视图,而不是处理跟踪他们所有的数据。
我在界面编辑器中制作了几乎所有 UI,因此我的 UICollectionView(我们称它们为 NewsCollectionView 和 ExploreCollectionView)和我的所有单元格都有 .xib 文件。这两个 .xib 文件通过 Interface Builder 中的 FilesOwner 属性 连接到它们的控制器。
我还有一个带有 tabBar 的主视图(我们称它为 HomeViewController),我想用它在我的两个 UICollectionView 之间切换。我的第一个问题很简单,如何从 NIB 初始化我的 UICollectionViews 之一?
这是我想象的样子(在我的 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];
该代码的结果是一条消息,说明 "Can't add self as subview"。
我的第二个问题是关于在两个 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];
}
}
但是我不知道这是否可行,因为我什至无法显示视图。请帮帮我,谢谢!!
我最终通过在我的 HomeViewController 中创建一个 containerView 并通过 IBOutlet 连接它来完成我的任务。
为了设置我的 collection 视图,我这样做了:
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];
视图转换与我在原始 post 中描述的一样,除了您必须引用实际视图而不是控制器(因此 self.newsCollectionView.view 而不仅仅是 self.newsCollectionView)。
很有魅力。
所以我有两个 UICollectionViews,它们具有不同类型的布局、不同类型的单元格以及单元格中的不同数据,因此我决定制作两个单独的视图,而不是处理跟踪他们所有的数据。
我在界面编辑器中制作了几乎所有 UI,因此我的 UICollectionView(我们称它们为 NewsCollectionView 和 ExploreCollectionView)和我的所有单元格都有 .xib 文件。这两个 .xib 文件通过 Interface Builder 中的 FilesOwner 属性 连接到它们的控制器。
我还有一个带有 tabBar 的主视图(我们称它为 HomeViewController),我想用它在我的两个 UICollectionView 之间切换。我的第一个问题很简单,如何从 NIB 初始化我的 UICollectionViews 之一?
这是我想象的样子(在我的 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];
该代码的结果是一条消息,说明 "Can't add self as subview"。
我的第二个问题是关于在两个 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];
}
}
但是我不知道这是否可行,因为我什至无法显示视图。请帮帮我,谢谢!!
我最终通过在我的 HomeViewController 中创建一个 containerView 并通过 IBOutlet 连接它来完成我的任务。
为了设置我的 collection 视图,我这样做了:
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];
视图转换与我在原始 post 中描述的一样,除了您必须引用实际视图而不是控制器(因此 self.newsCollectionView.view 而不仅仅是 self.newsCollectionView)。
很有魅力。