iOS UICollectionView小结 + 选中效果

  UICollectionView的出现使得复杂的界面简单化,下面带来UICollectionView的一些使用细节,以及多选的效果

    新建工程,在viewController .m 里的代码如下:

#import "ViewController.h"

#import "CollectionReusableView.h"



#define SCREEN_WIDTH   [UIScreen mainScreen].bounds.size.width


#define SCREEN_HEIGHT

@interface ViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>




@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    //flowLayout 控制UICollectionView布局

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];

    //section内置大小

    flowLayout.sectionInset = UIEdgeInsetsMake(10, 25, 10, 25);

    

    //默认最小为10 如果比10 需要重新赋值

//    flowLayout.minimumInteritemSpacing = 5;

    

    //行间距

    flowLayout.minimumLineSpacing = 5;

    

    //item大小 如果只有一种size 不适用代理方法返回大小

//    flowLayout.itemSize = CGSizeMake((SCREEN_WIDTH - 30)/ 3, 200);

    

    //预估算,节省时间

    //多种item大小 使用estimatedItemSize提高代码运算效率,提高流畅度

    //flowLayout.estimatedItemSize = CGSizeMake(((SCREEN_WIDTH - 20) + (SCREEN_WIDTH - 30)/3)/2, 200);

    

    

    //设置header大小

    flowLayout.headerReferenceSize = CGSizeMake(SCREEN_WIDTH, 50);

//    flowLayout.sectionHeadersPinToVisibleBounds = YES;

//    flowLayout.footerReferenceSize = CGSizeMake(SCREEN_WIDTH, 50);

    

    

    

    UICollectionView *collection = [[UICollectionView alloc]initWithFrame:self.view.frame collectionViewLayout:flowLayout];

    

    //设置允许多选

    collection.allowsMultipleSelection = YES;

   //签代理

    collection.delegate = self;

    collection.dataSource = self;

    collection.backgroundColor = [UIColor whiteColor];

   //注册

    [collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"UICollectionViewCell"];

    [self.view addSubview:collection];

    

    //头部区域 底部区域 cell一样遵循重用机制

    [collection registerClass:[CollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"UICollectionReusableView"];

    

    [collection registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"UICollectionReusable"];

    

    

    

    

    

    

    

}


#pragma mark - collection delegate/dataSource


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{

    

    return 3;

    

}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    

    if (section == 0) {

        return 1;

    }else if (section == 1){

        return 4;

        

    }else{

        

        return 5;

    }

    

}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"UICollectionViewCell" forIndexPath:indexPath];

    if (cell.isSelected) {

        cell.backgroundColor = [UIColor grayColor];

    }else{

        cell.backgroundColor = [UIColor orangeColor];

    

    }

    return cell;


    

}

#pragma mark - 

//collView学名是集合视图  tableView是表视图

//collView中的foot header 是曽补视图


- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{

    

    if (kind == UICollectionElementKindSectionHeader ) {

        CollectionReusableView *reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"UICollectionReusableView" forIndexPath:indexPath];

        reusableView.backgroundColor = [UIColor redColor];

        

        return reusableView;

        

    }else{

        

        UICollectionReusableView *reusable = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"UICollectionReusable" forIndexPath:indexPath];

        

        reusable.backgroundColor = [UIColor blackColor];

        

        return reusable;

        

    }

  

    

}


//判断分区,可以直接签代理 或者进入flowlayout里直接复制方法

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{

    

    if (indexPath.section == 0) {

         NSLog(@"1111111");

        return CGSizeMake(375, 200);

       

    }else  if (indexPath.section == 1){

        

        return CGSizeMake(SCREEN_WIDTH / 2 - 50 , 100);

        

    }else{

        

        return CGSizeMake(SCREEN_WIDTH - 20 , 200);

    }

    

}


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

    //根据idenxPath获取对应的cell

    UICollectionViewCell *cell =  [collectionView cellForItemAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor grayColor];

    

    

}



- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{

    UICollectionViewCell *cell =  [collectionView cellForItemAtIndexPath:indexPath];

    cell.backgroundColor = [UIColor orangeColor];


}


之后建一个基于UICollectionReusableView的类来设置他的头部和尾部


#import "CollectionReusableView.h"


@interface CollectionReusableView ()


@property (nonatomic ,retain)UILabel *label;


@end



@implementation CollectionReusableView



- (instancetype)initWithFrame:(CGRect)frame{

    

    if (self = [super initWithFrame:frame]) {

    

        self.label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];

        self.label.text = @"Amydom";

        self.label.textColor = [UIColor lightGrayColor];

        self.label.font = [UIFont systemFontOfSize:20];

        [self addSubview:self.label];

        

        

    }

    return self;

    

}






@end




关于 UICollectionView 的 重要的属性和值得注意的都在上面的代码中了,希望大家有时间多去研究研究它,确实非常好用



阅读更多
个人分类: iOS 开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭