zoukankan      html  css  js  c++  java
  • UICollectionView的使用

    初始化:

    //初始化布局类(UICollectionViewLayout的子类)
    UICollectionViewFlowLayout *fl = [[UICollectionViewFlowLayout alloc]init];

    //初始化collectionView
    self.collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:fl];

    //设置代理
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;

    --------------------

    需要实现的协议:
    UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
    PS:UICollectionViewDelegateFlowLayout是UICollectionViewDelegate的子协议

    --------------------

    注册相应的UICollectionViewCell子类到collectionView用来从队列提取和显示
    - (void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;
    PS:如果是用nib创建的话,使用下面这个函数来注册。
    - (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;

    如果需要显示每个section的headerView或footerView,则还需注册相应的UICollectionReusableView的子类到collectionView
    elementKind是header或footer的标识符,只有两种可以设置UICollectionElementKindSectionHeader和UICollectionElementKindSectionFooter
    - (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier;
    PS:如果是用nib创建的话,使用下面这个函数来注册。
    - (void)registerNib:(UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier;

    --------------------

    实现协议的函数:
    跟UITableView的DataSource和Delegate很像,大可自行代入理解。

    DataSource:

    //每一组有多少个cell
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

    //定义并返回每个cell
    - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

    //collectionView里有多少个组
    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

    //定义并返回每个headerView或footerView
    - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

    上面这个方法使用时必须要注意的一点是,如果布局没有为headerView或footerView设置size的话(默认size为CGSizeZero),则该方法不会被调用。所以如果需要显示header或footer,需要手动设置size。
    可以通过设置UICollectionViewFlowLayout的headerReferenceSize和footerReferenceSize属性来全局控制size。或者通过重载以下代理方法来分别设置
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;

    Delegate:

    //每一个cell的大小
    - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

    //设置每组的cell的边界, 具体看下图
    - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;

    142014942.png

    142045183.png



    //cell的最小行间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;

    //cell的最小列间距
    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;

    //cell被选择时被调用
    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

    //cell反选时被调用(多选时才生效)
    - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

    例子:

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.titleLab.text = @"会员信息";

        UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];

        layout.headerReferenceSize = CGSizeMake(self.view.bounds.size.width, 50.0f);

        _collectionView = [[UICollectionView alloc]initWithFrame:CGRectZero collectionViewLayout:layout];

         [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];

        [self.view addSubview:_collectionView];

        [_collectionView mas_makeConstraints:^(MASConstraintMaker *make) {

            make.top.equalTo(self.navView.mas_bottom).offset(0);

            make.width.equalTo(self.view.mas_width);

            make.left.offset(0);

            make.bottom.offset(0);

        }];

        _collectionView.dataSource = self;

        _collectionView.delegate = self;

        [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"1"];

    }

    #pragma  mark UICollectionViewDataSource,UICollectionViewDelegate

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

        return 10;

    }

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

        return 3;

    }

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

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

        cell.backgroundColor = [UIColor redColor];

        return cell;

    }

    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;

    {

        return 20;

    }

    - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{

        return 20;

    }

    //每一个cell的大小

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

        if(indexPath.section == 0){

            return CGSizeMake(50, 50);

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

            return CGSizeMake(self.view.bounds.size.width, 100);

        }else{

            return CGSizeMake(80, 80);

        }

    }

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

        UICollectionReusableView *resableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"header" forIndexPath:indexPath];

        

        UILabel *label = (UILabel *)[resableView viewWithTag:100];

        if (!label) {

            label = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, collectionView.frame.size.width, 40.0f)];

            label.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1];

            label.textColor = [UIColor blackColor];

            label.tag = 100;

            [resableView addSubview:label];

        }

        if (indexPath.section == 0) {

            label.text = @"切换栏目";

            UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

            button.frame = CGRectMake(self.view.bounds

                                      .size.width - 100.0f, 10.0f, 80, 30.0f);

            [button setTitle:@"排序删除" forState:UIControlStateNormal];

            [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

            button.layer.borderColor = [UIColor redColor].CGColor;

            button.layer.masksToBounds = YES;

            button.layer.cornerRadius = 5;

            button.layer.borderWidth = 1;

            [resableView addSubview:button];

            

        }else{

            label.text = @"点击添加更多栏目";

        }

        return resableView;

        

    }

    http://rainbownight.blog.51cto.com/1336585/1323780

  • 相关阅读:
    The Quad
    将OrCAD Capture CIS的设计文件(.dsn)导入到PADS Logic VX.2.3
    OrCAD Capture CIS 16.6 将版本16.6的设计文件另存为版本16.2的设计文件
    Eclipse IDE 添加jar包到Java工程中
    PADS Logic VX.2.3 修改软件界面语言
    切换Allegro PCB Editor
    Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件
    Allegro PCB Design GXL (legacy) 设置自动保存brd文件
    Could not create an acl object: Role '16'
    windows 下apache开启FastCGI
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/5344010.html
Copyright © 2011-2022 走看看