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
推荐阅读
- 转变与改变
- 难忘的一件事
- 谢谢你的爱1999(连载1-2)
- 业界观点|Geoffrey Hinton(深度学习的下一个大事件)
- 生产系统中的机器学习工程|基于 Docker 快速使用远程(云)数据库
- 成长的足迹0628
- 西湖茶园
- 孤独没什么不好的
- vxetable|vxetable 切换页面后表格行错位的解决方法
- 【七夕限定盲盒抽奖】一文带你搞懂盲盒抽奖的页面配置