问题描述
- 同一界面下 两个collectionView 如何使用 求大神解答
-
我想在一个controller下做两个不section 和cell 数不同的 collectionView 请大神指教
给跪了!!!#import "ViewController.h"
#define Screen_Width [UIScreen mainScreen].bounds.size.width
//获取屏幕高度
#define Screen_Height [UIScreen mainScreen].bounds.size.height#define left 1001
#define right 1002@interface ViewController ()
@property (strong, nonatomic)UICollectionView *collectionViewLeft;
@property (strong, nonatomic)UICollectionView *collectionViewRight;@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self initUI];
}
-(void)initUI
{
UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init];
// [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
[flowLayout setHeaderReferenceSize:CGSizeMake(Screen_Width/2, 50)];
self.collectionViewLeft=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 64, Screen_Width/2, Screen_Height-64) collectionViewLayout:flowLayout];
self.collectionViewLeft.dataSource=self;
self.collectionViewLeft.delegate=self;
self.collectionViewLeft.tag=left;
[self.collectionViewLeft setBackgroundColor:[UIColor blackColor]];
//注册Cell,必须要有
[self.collectionViewLeft registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"];
//注册headView,有headView必须有注册
[_collectionViewLeft registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"];
[self.view addSubview:self.collectionViewLeft];self.collectionViewRight=[[UICollectionView alloc] initWithFrame:CGRectMake(Screen_Width/2, 20, Screen_Width/2, Screen_Height-20) collectionViewLayout:flowLayout]; self.collectionViewRight.dataSource=self; self.collectionViewRight.delegate=self; self.collectionViewRight.tag=right; [self.collectionViewRight setBackgroundColor:[UIColor blackColor]]; //注册Cell,必须要有 [self.collectionViewRight registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"]; //注册headView,有headView必须有注册 [_collectionViewRight registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView"]; [self.view addSubview:self.collectionViewRight];
}
#pragma mark -- UICollectionViewDataSource//定义展示的UICollectionViewCell的个数
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
if (collectionView.tag==left) {
return 3;
}else{
return 2;
}
}//定义展示的Section的个数
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
if (collectionView.tag==left) {
return 5;
}else{
return 3;
}
}//每个UICollectionView展示的内容
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * CellIdentifier = @"UICollectionViewCell";
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];cell.backgroundColor = [UIColor redColor]; for (id subView in cell.contentView.subviews) { [subView removeFromSuperview]; } return cell;
}
#pragma mark --UICollectionViewDelegateFlowLayout
//定义每个Item 的大小
- (CGSize)collectionView:(UICollectionView )collectionView layout:(UICollectionViewLayout)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(100, 100);
}
//定义每个UICollectionView 的 margin
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
//方位
return UIEdgeInsetsMake(5, 5, 5, 5);
}//设置headView的回调函数
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
UICollectionReusableView *reusableview = nil;if (kind == UICollectionElementKindSectionHeader)
{
reusableview = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];reusableview.backgroundColor = [UIColor redColor];
}
UIView * view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,Screen_Width, 50)];
view.backgroundColor=[UIColor orangeColor];
[reusableview addSubview:view];
return reusableview;
}
#pragma mark --UICollectionViewDelegate
//UICollectionView被选中时调用的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
//临时改变个颜色,看好,只是临时改变的。如果要永久改变,可以先改数据源,然后在cellForItemAtIndexPath中控制。(和UITableView差不多吧!O(∩_∩)O~)
cell.backgroundColor = [UIColor greenColor];
NSLog(@"%d ",collectionView.tag);
NSLog(@"item======%ld",(long)indexPath.item);
NSLog(@"row=======%ld",(long)indexPath.row);
NSLog(@"section===%ld",(long)indexPath.section);
}//返回这个UICollectionView是否可以被选择
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}@end
- (void)viewDidLoad {
解决方案
问题是什么呢 ?你贴个代码想表达什么?是没有实现还是 实现的结果 跟预想的不一样?
解决方案二:
两个collectionview,你可以给它们的tag赋值,数据源,代理,都传有一个collectionview,你依据它的tag返回你的指定的数据源和cell内容等等。
解决方案三:
两个collectionview,你可以给它们的tag赋值,数据源,代理,都传有一个collectionview,你依据它的tag返回你的指定的数据源和cell内容等等。
解决方案四:
一个控制器可以管理两个、多个collection View,判断一下