创建一个UICollectionView

从工作到现在写过N个CollectionView,但是之前从没有记录下来,今天记录一个collection view,之后工作中每次用到都会将之前没有记录过的添加进来。

准备:

因为我使用的是Masonry创建约束,没有使用CGRect,即没有使用坐标系的frame,但是你可以使用CGRect坐标系或者自己创建NSLayoutConstraint约束,另在这里附上Masonry的下载地址,来自GitHub。

声明

1.在写Collection View的时候,先在.m文件的@interface ViewController () 中声明一个collection view,即:@property (nonatomic, strong) UICollectionView *collectionView;
2.引入Collection的三个代理,即@interface ViewController ()
3.因为使用了Masonry,里面有block,所以要声明一个WeakSelf,#define WeakSelf __weak typeof (self) wself = self

初始化Collection View

初始化Collection View的时候和初始化TableView是不一样的,虽然都是继承UIScrollView,初始化Collection View的时候需要初始化一个layout,即UICollectionViewFlowLayout,我们引用的代理UICollectionViewDelegateFlowLayout就是这个layout的代理回掉,UICollectionViewFlowLayout主要是布局约束,比如Cell的大小,水平垂直间隙等等,我在这里只写最基本的也就是基本必须实现的一些参数和方法,创建了layout之后再创建Collection View,而且创建Collection View需要一个UICollectionViewLayout参数。

UICollectionViewLayout常用属性

/*行间距*/
@property (nonatomic) CGFloat minimumLineSpacing;
/*列间距*/
@property (nonatomic) CGFloat minimumInteritemSpacing;
/*
cell的大小,注意:
1.在这里声明了,就可以不使用代理回调来约束cell的大小;
2.但是如果这里没有声明,代理必须要实现;
3.如果使用这个约束了,并且代理也实现了,优先代理的约束;
4.设置cell的代理为:- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
5.本文两种方法同时写上了.
*/
@property (nonatomic) CGSize itemSize;
/*
Collection 滑动的方向,即:垂直或者水平滑动(即:上下或者左右滑动)
这是一个枚举值:
UICollectionViewScrollDirectionVertical    垂直(上下)滑动
UICollectionViewScrollDirectionHorizontal  水平(左右)滑动
*/
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;
/*header的默认大小*/
@property (nonatomic) CGSize headerReferenceSize;
/*footer的默认大小*/
@property (nonatomic) CGSize footerReferenceSize;
/*CollectionView的内边距,即上左下右的边距*/
@property (nonatomic) UIEdgeInsets sectionInset;

初始化一个Collection View代码如下:

- (UICollectionView *)collectionView {
    if (!_collectionView) {
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        layout.itemSize     = CGSizeMake(40, 40);
        layout.sectionInset = UIEdgeInsetsMake(10, 5, 10, 5);
        layout.scrollDirection         = UICollectionViewScrollDirectionVertical;
        layout.minimumLineSpacing      = 4.0;
        layout.minimumInteritemSpacing = 8.0;
        _collectionView = [[UICollectionView alloc] initWithFrame:CGRectNull collectionViewLayout:layout];
        /*是否能滑动,YES为能滑动,collection默认能滑动*/
        _collectionView.scrollEnabled   = YES;
        _collectionView.backgroundColor = [UIColor whiteColor];
        /*要记得注册你的cell*/
        [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell_ID"];
        [self.view addSubview:_collectionView];
    }
    return _collectionView;
}

viewDidLoad里面添加代理和约束:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.collectionView.delegate   = self;
    self.collectionView.dataSource = self;
    WeakSelf;
    [self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(wself.view).insets(UIEdgeInsetsMake(0, 0, 0, 0));
    }];
}

OK,这些好了添加基本的代理回掉

#pragma mark -
#pragma mark - collection View Deleagte

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 100;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(40, 40);
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    HWCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HWCollectionCell_ID" forIndexPath:indexPath];
    cell.randomNUmberLabel.text = [NSString stringWithFormat:@"%d", 100 +  (arc4random() % 101)];
    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"点击了第%ld个Cell", indexPath.row + 1);
}

使用到了自定义Cell,cell的.h.m的代码如下

/*-----------------------------------.h-----------------------------------*/
#import 

@interface HWCollectionCell : UICollectionViewCell

@property (nonatomic, strong) UILabel *randomNUmberLabel;

@end

/*-----------------------------------.m-----------------------------------*/
#import "HWCollectionCell.h"
#import "Masonry.h"

@implementation HWCollectionCell

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self initializeTheCollectionViewCellInterface];
    }
    return self;
}

- (void)initializeTheCollectionViewCellInterface {
    __weak typeof (self) wself = self;
    self.contentView.backgroundColor = [UIColor orangeColor];
    [self.randomNUmberLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(wself.contentView).insets(UIEdgeInsetsMake(0, 0, 0, 0));
    }];
}

- (UILabel *)randomNUmberLabel {
    if (!_randomNUmberLabel) {
        _randomNUmberLabel = [[UILabel alloc] init];
        _randomNUmberLabel.textAlignment = NSTextAlignmentCenter;
        [self.contentView addSubview:_randomNUmberLabel];
    }
    return _randomNUmberLabel;
}

@end
collection view 的header和footer再更新本文。

你可能感兴趣的:(创建一个UICollectionView)