博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发UI篇--UICollectionView初步入门
阅读量:6368 次
发布时间:2019-06-23

本文共 2964 字,大约阅读时间需要 9 分钟。

一、UICollectionView的简介

UICollectionView是iOS 6中引进的列表展现控件,用于展示集合视图,布局更加灵活,可以高度定制内容的展现,可以有效的进行数据管理,即使对于大量数据,也非常的高效。苹果官方给出了Demo是一个类似于Android里面的GridView的实现。和UITableView的实现相比较,他对于每一个Item都是一次复用,而UITableView只能对于每一行进行复用。如果你认为它仅仅是对GridView在IOS中的实现的话,那你就太小看它的功能了。下面我们就来一起学习UICollectionView的使用方法。

二、UICollectionView的感性认识

网上有一个书架的举例很经典,很好的说明了UICollectionView的表现形式。如图:

1.png

一个标准的UICollectionView包含三个部分,他们都是UIView的子类:

Cells 用于展示内容的主体,对于不同的Cell可以指定不同的尺寸和内容。

Supplementary Views 附加视图,可以理解为UITableView每个Section的HeaderView和FooterView。
Decoration Views 装饰视图,这是每个section的背景视图,用于装饰该section。
将上图分解为以上三个元素组成的结构,如下图所示:

2.jpg

三、基本原理

UICollectionView 向 UICollectionViewLayout 询问布局,当询问过程发生时,layout 对象会创建 UICollectionViewLayoutAttributes 实例。一个 UICollectionViewLayoutAttributes 对象管理着一个对应的 item layout 相关信息(一对一关系)

四、实现一个简单的gridview视图

效果如下:

1.gif

第一步:生成UICollectionViewFlowLayout对象,设置他的显示大小、每个item之间的边距和滚动方向。

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];flowLayout.itemSize = CGSizeMake(SCREEN_WIDTH/2-10, SCREEN_WIDTH/2-10);flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;flowLayout.minimumLineSpacing = 20;//设置每个item之间的间距

第二步:生成collectionView对象,设置他的显示大小、代理方法和其他相关属性。

UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, self.navBarHeight, SCREEN_WIDTH, SCREEN_HEIGHT-self.navBarHeight) collectionViewLayout:flowLayout];collectionView.delegate = self;collectionView.dataSource = self;collectionView.showsVerticalScrollIndicator = YES;collectionView.backgroundColor = [UIColor blackColor];[self.view addSubview:collectionView];

第三步:注册Cell,重用Cell

首先在初始化的时候注册cell的Id。

[self.collectionView registerClass:[Demo1Cell class] forCellWithReuseIdentifier:Demo1CellID];

然后在使用Cell的时候,使用以下方法进行重用。

Demo1Cell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:Demo1CellID forIndexPath:indexPath];

第四步:实现UICollectionViewDataSource的三个代理方法。

  • section的数量 -numberOfSectionsInCollection:
  • 某个section里有多少个item-collectionView:numberOfItemsInSection:
  • 对于某个位置应该显示什么样的cell -collectionView:cellForItemAtIndexPath:
#pragma mark- UICollectionViewDataSource-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{    return 1;}-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{    return 31;}-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{    Demo1Cell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:Demo1CellID forIndexPath:indexPath];    if(!cell){        cell = [[Demo1Cell alloc] init];    }    [cell setImageName:[NSString stringWithFormat:@"%zi",indexPath.row] content:[NSString stringWithFormat:@"{%zi,%zi}",indexPath.section,indexPath.row]];    return cell;}

五、Demo下载地址

推荐一个iOS高级交流群:624212887,群文件自行下载,不管你是小白还是大牛热烈欢迎进群 ,分享面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。——点击:

如果觉得对你还有些用,就关注小编+喜欢这一篇文章。你的支持是我继续的动力。

下篇文章预告:使用UICollectionView实现一个无限轮播的案例

文章来源于网络,如有侵权,请联系小编删除。

转载地址:http://virma.baihongyu.com/

你可能感兴趣的文章
(筆記) 如何使ModelSim與nLint並存? (SOC) (ModelSim) (nLint)
查看>>
linux 2.6.32 在arm9(s3c2440)平台的移植 - 标题要长(1)
查看>>
Android Layout XML属性
查看>>
C#操作配置文件
查看>>
WCF实例上下文模式与并发模式对性能的影响
查看>>
【C#学习笔记】窗口隐藏、最小化、最大化、正常化
查看>>
.NET 4.0 Beta2中的BigInteger和Complex类
查看>>
[Leetcode] Populating Next Right Pointers in Each Node
查看>>
由于客观原因,暂时学习php两天,然后继续学习.net
查看>>
30个免费下载高质量精美照片素材的网站(转)
查看>>
初学Linux
查看>>
Oracle Essbase入门系列(三)
查看>>
处理任务队列的工作线程的创建
查看>>
迎接互联网的明天--玩转3D Web
查看>>
心态成就财富
查看>>
TeeChart 4.0.2009.62335 不过期的方法
查看>>
云安全 安全领域的最大热点之一
查看>>
微软面试题:正则表达式提取链接地址
查看>>
Java MD5 加密加强版
查看>>
当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家...
查看>>