美文网首页
UICollectionView

UICollectionView

作者: 贤宇 | 来源:发表于2016-02-23 13:19 被阅读395次
    继承关系 UICollectionViewLayout UICollectionViewLayout
    ViewController.m里
    #import "ViewController.h"
    #import "TestCollectionViewCell.h"
    #import "DetailCollectionViewController.h"
    #import "HeaderCollectionReusableView.h"
    @interface ViewController ()<UICollectionViewDelegateFlowLayout,UICollectionViewDataSource>
    @end
    @implementation ViewController
    NSString *identifier =  @"cell";
    NSString *headerIdentifier = @"header";
    NSString *footerIdentifier = @"footer";
    - (void)viewDidLoad {
        [super viewDidLoad];
        // 创建布局对象
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
        // 1.设置最小行间距
        flowLayout.minimumLineSpacing = 50;
        // 2.设置最小列间距 (大于最小列间距后 自适应距离大小)
        flowLayout.minimumInteritemSpacing = 20;
        // 3.设置Item大小
        flowLayout.itemSize = CGSizeMake(50, 50);
        // 4.设置滚动方向 (水平 和 垂直)
        flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
        // 5.设置集合视图内边距大小(上 左 下 右)
        flowLayout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
        // 6.设置header区域大小 (设置大小就要返回视图)
        flowLayout.headerReferenceSize = CGSizeMake(414, 70);
        // 7.设置footer区域大小
    //    flowLayout.footerReferenceSize = CGSizeMake(414, 40);
    
    // 注册增补视图(没有头和尾 只有增补视图)  UICollectionReusableView增补视图基类
        // header注册
        [collectionView registerClass:[HeaderCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];
        // footer注册
       //    [collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier];
        // 创建UICollectionView之前必须先创建布局对象
        UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[UIScreen mainScreen].bounds collectionViewLayout:flowLayout];
        // 设置属性
        collectionView.backgroundColor = [UIColor whiteColor];// 默认是黑色
        // 是否显示垂直反向指示标    collectionView.showsVerticalScrollIndicator = NO;
        // 设置代理
        collectionView.delegate = self;
        collectionView.dataSource = self;
        // 注册cell
        [collectionView registerClass:[TestCollectionViewCell class] forCellWithReuseIdentifier:identifier];
         // 添加到视图上 
        [self.view addSubview:collectionView];
      }
    #pragma --- UICollectionViewDelegateFlowLayout ---
    // 返回cell (必须实现一般自定义,因为属性少)
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
        TestCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
        cell.contentView.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
        cell.imgView.image = [UIImage imageNamed:@"2"];
           return cell;
    }
    // 设置每个分区返回多少Item (必须实现)
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
        return 13;
    }
    // 设置区域个数
    -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
        return 3;
    }
    // 返回增补视图
    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
        // 如果是头视图
        if (kind == UICollectionElementKindSectionHeader) {
            // 从重用池里面取
            HeaderCollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:headerIdentifier forIndexPath:indexPath]; 
           headerView.backgroundColor = [UIColor brownColor];
            headerView.titleLabel.text = @"测试";
            return headerView;
        }else{
    //        UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier forIndexPath:indexPath];
    //        footerView.backgroundColor = [UIColor orangeColor];
    //        return footerView;
            return nil;
        }
    }
    // 点击每个item触发的方法
    -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
        NSLog(@"%ld --- %ld",indexPath.section,indexPath.row);
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
        DetailCollectionViewController *detailVC = [[DetailCollectionViewController alloc] 
    initWithCollectionViewLayout:flowLayout];
        detailVC.collectionView.backgroundColor = [UIColor whiteColor];
        [self.navigationController pushViewController:detailVC animated:YES];
    }
    // 指定哪些路径可以被点击
    -(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath{
        if (indexPath.section == 0) {
            return NO;
        }
        return YES;}
    // 返回内边距的上左下右的边距
    -(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
           return UIEdgeInsetsMake(30, 30, 30, 30);
    }
    
    HeaderCollectionReusableView.h里
    #import <UIKit/UIKit.h>
    @interface HeaderCollectionReusableView : UICollectionReusableView
    @property (nonatomic,strong) UILabel *titleLabel;
    @end
    
    #import "HeaderCollectionReusableView.h"
    @implementation HeaderCollectionReusableView
    -(instancetype)initWithFrame:(CGRect)frame{
        if (self = [super initWithFrame:frame]) {
            self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, 200, 40)];
            _titleLabel.backgroundColor = [UIColor redColor];
            [self addSubview:_titleLabel];
        }
        return self;
    }
    @end
    
    TestCollectionViewCell.h里
    #import <UIKit/UIKit.h>
    @interface TestCollectionViewCell : UICollectionViewCell
    @property (nonatomic,strong) UIImageView *imgView;
    @end
    TestCollectionViewCell.h 里
    @implementation TestCollectionViewCell- (instancetype)initWithFrame:(CGRect)frame{
        if (self = [super initWithFrame:frame]) {
            // 跟cell等大的imgView
            self.imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
            [self.contentView addSubview:_imgView];
        }
        return self;
    }
    @end
    

    相关文章

      网友评论

          本文标题:UICollectionView

          本文链接:https://www.haomeiwen.com/subject/cdvukttx.html