UICollectionViewCell 的正确写法
2018-08-13 本文已影响301人
全世界妳最美
1.原生的
#import "WJBroadcastController.h"
static NSString * identifier = @"cxCellID";
static NSString * headIdentifier = @"headIdentifier";
@interface WJBroadcastController ()<UICollectionViewDelegate,UICollectionViewDataSource>
@property (nonatomic,strong)UICollectionViewFlowLayout *collectionFlowLayout;
@property (nonatomic,strong)UICollectionView *collectionView;
@end
@implementation WJBroadcastController
- (UICollectionView *)collectionView{
if (!_collectionView) {
_collectionView = [[UICollectionView alloc] initWithFrame:CGRectNull collectionViewLayout:self.collectionFlowLayout];
_collectionView.backgroundColor = QkColor;
_collectionView.allowsMultipleSelection = NO;//是否支持多选
_collectionView.delegate = self;
_collectionView.dataSource = self;
}
return _collectionView;
}
// 可以自定义一些
-(UICollectionViewFlowLayout *)collectionFlowLayout{
if (!_collectionFlowLayout) {
_collectionFlowLayout = [[UICollectionViewFlowLayout alloc] init];
_collectionFlowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
_collectionFlowLayout.itemSize = CGSizeMake(100, 100);//每个item的大小
//_collectionFlowLayout.minimumLineSpacing = 50;//行间距
//_collectionFlowLayout.minimumInteritemSpacing = 10;//item之间的距离
_collectionFlowLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);//每组的位置间距
// _collectionFlowLayout.headerReferenceSize = CGSizeMake(ScreenW, 80);
// _collectionFlowLayout.footerReferenceSize = CGSizeMake(ScreenW, 40);
}
return _collectionFlowLayout;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.collectionView];
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(ScreenW, 500));
make.centerX.equalTo(self.view);
make.top.mas_equalTo(self.view);
}];
//注册collection 的cell
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:identifier];
//注册collection 的header;
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headIdentifier];
}
#pragma mark - cell代理
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 2;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return 9;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor colorWithRed:arc4random()%255/255.0 green:arc4random()%255/255.0 blue:arc4random()%255/255.0 alpha:1];
for (UIView *view in cell.contentView.subviews) {
if (view) {
[view removeFromSuperview];
}
}
return cell;
}
//选择了某个collection
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor redColor]];
}
//取消某个collection
- (void)collectionView:(UICollectionView*)collectionView didDeselectItemAtIndexPath:(NSIndexPath*)indexPath
{
UICollectionViewCell*cell = [collectionView cellForItemAtIndexPath:indexPath];
[cell setBackgroundColor:[UIColor greenColor]];
}
#pragma mark - 头视图的代理
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
UICollectionReusableView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headIdentifier forIndexPath:indexPath];
header.backgroundColor = [UIColor yellowColor];
#warning message - 不同组的头视图(不一样)。
// 解决头视图不一样的问题 添加多个头视图,以及设置他们的大小
NSInteger index = indexPath.section;
if (index == 0) {
}
if (index == 1) {
}
return header;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
//return CGSizeMake(头视图的宽, 头视图的高);
return CGSizeMake(ScreenW, 50);
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section {
//return CGSizeMake(尾视图的宽, 尾视图的高);
return CGSizeMake(ScreenW, 50);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
2.简单的分装一下。cell 以及头视图或者尾部试图
2.1 -----------------------cell
#define cellWidth self.contentView.bounds.size.width -10
#import "FirstMusicCollectionCell.h"
@interface FirstMusicCollectionCell ()
@property (nonatomic,strong)UIButton *butimage;
@property (nonatomic,strong)UILabel *lab1;
@property (nonatomic,strong)UILabel *lab2;
@end
@implementation FirstMusicCollectionCell
static FirstMusicCollectionCell *cell;
+ (instancetype)collection:(UICollectionView *)collectionView indexpath:(NSIndexPath *)indexpath{
NSString *cellid = @"FirstMusicCollectionCell";
[collectionView registerClass:[FirstMusicCollectionCell class] forCellWithReuseIdentifier:cellid];
cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellid forIndexPath:indexpath];
return cell;
}
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self hg_setAllCornerWithCornerRadius:4];
[self creatUI];
}
return self;
}
- (void)creatUI{
UIButton *but = [[UIButton alloc] init];
[self.contentView addSubview:but];
but.userInteractionEnabled = NO;
but.backgroundColor = [UIColor redColor];
[but hg_setAllCornerWithCornerRadius:4];
[but mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(cellWidth, cellWidth));
make.centerX.equalTo(self.contentView);
make.top.mas_equalTo(self.contentView).offset(5);
}];
UILabel *lab1 = [[UILabel alloc] init];
[self.contentView addSubview:lab1];
lab1.font = font(12);
lab1.textAlignment = NSTextAlignmentLeft;
[lab1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.contentView);
make.size.mas_equalTo(CGSizeMake(cellWidth, 15));
make.top.mas_equalTo(but.mas_bottom);
}];
UILabel *lab2 = [[UILabel alloc] init];
lab2.textColor = [UIColor colorTextGray];
[self.contentView addSubview:lab2];
lab2.font = font(12);
lab2.textAlignment = NSTextAlignmentLeft;
[lab2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.contentView);
make.size.mas_equalTo(CGSizeMake(cellWidth, 15));
make.top.mas_equalTo(lab1.mas_bottom);
}];
_butimage = but;
_lab1 = lab1;
_lab2 = lab2;
}
- (void)setModel:(FirstMusicModel *)model
{
_model = model;
// [_butimage setImage:self.model.image];
_lab1.text = self.model.text1;
_lab2.text = self.model.text2;
}
- (void)setModel2:(FirstMusicListModel *)model2
{
_model2 = model2;
// [_butimage setImage:self.model2.image];
_lab1.text = self.model2.text1;
_lab2.text = self.model2.text2;
}
#pragma mark- 解决重用问题
//预防重用-- 目前没遇到问题
- (void)prepareForReuse {
//NSLog(@"MyCollection9999999%s --- %@", __func__, self);
}
@end
2.2 头部试图 *********** 不要一个里面写好几个,分开写
//
// FirstMusciHeader2.m
// ParallelWorld
//
// Created by 齐凯 on 2018/10/12.
// Copyright © 2018年 Mac. All rights reserved.
//
#import "FirstMusciHeader2.h"
@interface FirstMusciHeader2()
@property (nonatomic,strong)UIView *view1;
@end
@implementation FirstMusciHeader2
static FirstMusciHeader2 *header;
+ (instancetype)collectionResuableView:(UICollectionView *)collectionView indexpath:(NSIndexPath *)indexPath{
NSString *cellID = @"FirstMusciHeader2";
//注册collection 的header;
[collectionView registerClass:[FirstMusciHeader2 class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:cellID];
header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:cellID forIndexPath:indexPath];
return header;
}
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self creatUI];
self.backgroundColor = [UIColor blackColor];
}
return self;
}
- (void)creatUI{
[self view1];
}
- (UIView *)view1{
if (!_view1) {
_view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 40, ScreenW, 40)];
_view1.backgroundColor = [UIColor whiteColor];
[self addSubview:self.view1];
UILabel *lab = [[UILabel alloc] init];
lab.text = @"热门单曲";
lab.textAlignment = NSTextAlignmentCenter;
lab.font = [UIFont systemFontOfSize:17];
[_view1 addSubview:lab];
[lab mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(200, 40));
make.center.equalTo(self.view1);
}];
UIButton *but = [[UIButton alloc] init];
[but addTarget:self action:@selector(butNextBtn) forControlEvents:(UIControlEventTouchUpInside)];
[_view1 addSubview:but];
[but setImage:@"更多_28"];
[but mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(30, 30));
make.centerY.equalTo(self.view1);
make.right.mas_equalTo(self.view1);
}];
}
return _view1;
}
#pragma mark - 点击事件
- (void)butNextBtn{
//更多
}
@end