UICollectionView的使用

由于UICollectionView的用处较多,每次使用都去网上查阅资料,今天抽空来总结一下UICollectionView的使用 collectionView和tableView最大的不同之处就是需要自定义cell,所以第一步自定义collectionViewCell .h文件

@interface MoreMaterialCell : UICollectionViewCell @property (strong, nonatomic) UIImageView *topImage; @property (strong, nonatomic) UILabel *botlabel; @end

.m文件
- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { _topImage= [[UIImageView alloc] initWithFrame:CGRectMake(10, 0, 70, 70)]; _topImage.backgroundColor = [UIColor redColor]; [self.contentView addSubview:_topImage]; _botlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 70, 30)]; _botlabel.textAlignment = NSTextAlignmentCenter; _botlabel.textColor = [UIColor blueColor]; _botlabel.font = [UIFont systemFontOfSize:15]; _botlabel.backgroundColor = [UIColor purpleColor]; [self.contentView addSubview:_botlabel]; }return self; }

-在MoreMaterialVC(继承自UIcollectionView)中实现一下三个协议:
@interface MoreMaterialVC ()

【UICollectionView的使用】MoreMaterialVC控制器中的具体代码如下:
//Created by apple on 2018/12/17. //Copyright ? 2018 apple. All rights reserved.#import "MoreMaterialVC.h" #import "MoreMaterialCell.h" @interface MoreMaterialVC ()@end@implementation MoreMaterialVCstatic NSString * const reuseIdentifier = @"Cell"; - (void)viewDidLoad { [super viewDidLoad]; //1.初始化layout UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; //设置collectionView滚动方向 //[layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; //设置headerView的尺寸大小 layout.headerReferenceSize = CGSizeMake(self.view.frame.size.width, 100); //该方法也可以设置itemSize layout.itemSize =CGSizeMake(110, 150); //2.初始化collectionView self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout]; [self.view addSubview:self.collectionView]; self.collectionView.backgroundColor = [UIColor clearColor]; //3.注册collectionViewCell //注意,此处的ReuseIdentifier 必须和 cellForItemAtIndexPath 方法中 一致 均为 cellId [self.collectionView registerClass:[self.collectionView class] forCellWithReuseIdentifier:@"cellId"]; //注册headerView此处的ReuseIdentifier 必须和 cellForItemAtIndexPath 方法中 一致均为reusableView [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"reusableView"]; //4.设置代理 self.collectionView.delegate = self; self.collectionView.dataSource = self; }#pragma mark collectionView代理方法 //返回section个数 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 3; } //每个section的item个数 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 9; }- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {MoreMaterialCell *cell = (MoreMaterialCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cellId" forIndexPath:indexPath]; cell.botlabel.text = [NSString stringWithFormat:@"{%ld,%ld}",(long)indexPath.section,(long)indexPath.row]; cell.backgroundColor = [UIColor yellowColor]; return cell; }//设置每个item的尺寸 - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(90, 130); }//footer的size //- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section //{ //return CGSizeMake(10, 10); //}//header的size //- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section //{ //return CGSizeMake(10, 10); //}//设置每个item的UIEdgeInsets - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(10, 10, 10, 10); }//设置每个item水平间距 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 10; }//设置每个item垂直间距 - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { return 15; }//通过设置SupplementaryViewOfKind 来设置头部或者底部的view,其中 ReuseIdentifier 的值必须和 注册是填写的一致,本例都为 “reusableView” - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath { UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"reusableView" forIndexPath:indexPath]; headerView.backgroundColor =[UIColor grayColor]; UILabel *label = [[UILabel alloc] initWithFrame:headerView.bounds]; label.text = @"这是collectionView的头部"; label.font = [UIFont systemFontOfSize:20]; [headerView addSubview:label]; return headerView; }//点击item方法 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { MoreMaterialCell *cell = (MoreMaterialCell *)[collectionView cellForItemAtIndexPath:indexPath]; NSString *msg = cell.botlabel.text; NSLog(@"%@",msg); }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

    推荐阅读