UICollectionView(I)

UICollectionView 与 UITableView的异同

相同点:

不同点:

① 动过代理和数据源方法来实现UI和数据填充的;

② 对Cell的重利用,实现了循环利用优化;

不同点:

① UITableView是系统自定义的竖直布局,只能竖直滚动,UICollectionView可以自由选择竖直布局和水品布局,分别为竖直滚动和水平滚动;

② UITableViewController的self.view == self.tableview;,但UICollectionViewController的self.view != self.collectionView;

③ UICollectionView的cell只能通过注册来确定重用标识符;

属性

滚动方向属性scrollDirection:

 1 //垂直滚动,表示Cell布局是从左往右,从上到下排列的布局
 2 //水平滚动,表示Cell方块布局是从上往下,从左到右排列的布局
 3 typedef NS_ENUM(NSInteger, UICollectionViewScrollDirection) {
 4     UICollectionViewScrollDirectionVertical,  /*垂直滚动*/
 5     UICollectionViewScrollDirectionHorizontal /* 水平滚动 */
 6 };
 7
 8
 9 //和UITableView不同,UICollectionView只能在这里设置顶部视图和底部视图的大小
10
11 //设置为垂直滚动时,顶部和底部视图的宽度为UICollectionView的宽度,无法设置
12
13 //设置为水平滚动时,顶部和底部视图的高度为UICollectionView的高度,无法设置

常用方法

 1 //向容器视图注册Cell视图,有2种方式,一种是类名注册,一种是Xib注册
 2 - (void)registerClass:(Class)cellClass /* 视图类*/    forCellWithReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
 3
 4 - (void)registerNib:(UINib *)nib /* Xib */    forCellWithReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
 5
 6 //从缓存池中取出Cell视图对象,如果缓存池没有,自动调用alloc/initWithFrame创建
 7 - (UICollectionViewCell *)dequeueReusableCellWithReuseIdentifier:(NSString *)identifier     forIndexPath:(NSIndexPath *)indexPath;
 8
 9 //kind参数设置
10 NSString *const    UICollectionElementKindSectionHeader;/* 顶部视图用这个 */
11 NSString *const    UICollectionElementKindSectionFooter;/* 底部视图用这个 */
12
13
14 //向容器视图注册顶部视图或者底部视图,有2种方式,一种是类名注册,一种是Xib注册
15 - (void)registerClass:(Class)viewClass
16         forSupplementaryViewOfKind:(NSString *)kind /* 参考上面 */    withReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
17
18 - (void)registerNib:(UINib *)nib    forSupplementaryViewOfKind:(NSString *)kind /* 参考上面 */    withReuseIdentifier:(NSString *)identifier;/* 绑定标识 */
19
20 /* 从缓存池中取出顶部视图对象或者底部视图对象,如果缓存池没有,自动调用alloc/initWithFrame创建 */
21 - (UICollectionReusableView *)dequeueReusableSupplementaryViewOfKind:(NSString *)kind    withReuseIdentifier:(NSString *)identifier     forIndexPath:(NSIndexPath *)indexPath;    

UICollectionViewDelegate的代理方法

1 // 选中Cell方块时调用
2 - (void)collectionView:(UICollectionView *)collectionView    didSelectItemAtIndexPath:(NSIndexPath *)indexPath;
3
4 //取消选中Cell方块时调用
5 - (void)collectionView:(UICollectionView *)collectionView    didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

UICollectionViewDataSource数据源方法

 1 @required
 2 //设置容器视图各个组都有多少个Cell
 3 - (NSInteger)collectionView:(UICollectionView *)collectionView    numberOfItemsInSection:(NSInteger)section;
 4
 5 //设置Cell,类似于UITableViewCell的设置
 6 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView    cellForItemAtIndexPath:(NSIndexPath *)indexPath;
 7
 8
 9 @optional
10 //容器视图有多少个组,默认返回1
11 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;
12
13 //设置顶部视图和底部视图,通过kind参数分辨是设置顶部还是底部
14 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView    viewForSupplementaryElementOfKind:(NSString *)kind    atIndexPath:(NSIndexPath *)indexPath;

UICollectionViewDelegateFlowLayout的代理布局方法

1 // 设置每个方块的尺寸大小
2 - (CGSize)collectionView:(UICollectionView *)collectionView    layout:(UICollectionViewLayout*)collectionViewLayout    sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
3
4 //设置方块视图和边界的上下左右间距
5 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView    layout:(UICollectionViewLayout*)collectionViewLayout    insetForSectionAtIndex:(NSInteger)section;

看图示:

原文地址:https://www.cnblogs.com/EchoHG/p/9405130.html

时间: 2024-10-13 14:33:58

UICollectionView(I)的相关文章

UICollectionView介绍使用

UICollectionView是一种类似于UITableView但又比UITableView功能更强大.更灵活的视图,这是源于它将UICollectionView对cell的布局交给了UICollectionViewLayout,而且允许用户自定义layout来进行布局. 下面是UICollectionView合并内容和布局并生成最终界面的一个流程: 当UICollectionView显示内容时,先从Data source(数据源)获取cell,然后交给UICollectionView.再从U

UIScrollView的delegate方法妙用之让UICollectionView滑动到某个你想要的位置

一个UICollectionView有好多个cell,滑动一下,谁也不知道会停留在哪个cell,滑的快一点,就会多滑一段距离,反之则会滑的比较近,这正是UIScrollview用户体验好的地方. 如果想要UICollectionView停留到某个cell的位置,可以用 - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPos

IOS 瀑布流UICollectionView实现

IOS 瀑布流UICollectionView实现 在实现瀑布流之前先来看看瀑布流的雏形(此方法的雏形 UICollectionView) 对于UICollectionView我们有几点注意事项 它和tableView不一样,ContentView的内容完全需要我们自己去添加. 它与tableview相比,他的初始化需要FlowLayout并且大部分操作在其上. UIcollectionView的实用性极强,虽然有时他并不是最好的解决方案,但是它可以很灵活的实现各种效果. 图(一) 如图,模拟器

iOS8 UICollectionView横向滑动demo

在iOS8中,scrollView和加载在它上面的点击事件会有冲突,所以做一个横向滑动的界面最好的选择就是UICollectionView. 这个效果可以用苹果公司提供的官方demo修改而来,下载地址https://github.com/SeniorZhai/LineLayout. 主要介绍涉及到的几个属性,在LineLayout.m文件中: //cell大小 self.itemSize = CGSizeMake(200, 250); //水平滑动 self.scrollDirection =

自定义UICollectionLayout布局 —— UIKit之学习UICollectionView记录一《瀑布流》

一.思路 思路一:比较每一行所有列的cell的高度,从上到下(也就是从第一行开始),从最短的开始计算,(记录下b的高度和索引,从开始计算,依次类推) 思路二:设置上.下.左.右间距和行间距.列间距及列数. 思路三:实现的重要的方法. 二.代码先行. 1.自定义layout类. //入口 #import <UIKit/UIKit.h> @protocol STRWaterLayoutDelegate; @interface STRWaterLayout : UICollectionViewLay

手把手教你使用UICollectionView写公司的项目

公司的UI图 在很多app中都有这样通用的页面,一直没有机会使用UICollectionView,只是简单的看过他的使用方法.今天公司美工出图,使用了他,并且遇到了好多的坑.记录一下过程,不确定使用的方法是不是最优的,如果有更好的方案,一起讨论,一起进步 理论篇 一.UICollectionViewLayout是做什么的? 1.1 在创建UITableView的时候,使用的是- (instancetype)initWithFrame:(CGRect)frame style:(UITableVie

集合视图(UICollectionView)

集合视图的四个组成部分: 单元格:它是集合视图中的一个单元格. 节:它是集合视图中的一个行数据,由多个单元格构成 补充视图:它是节的头和脚 装饰视图:集合视图中的背景图. UICollectionView继承自UIScrollView.有两个协议:UICollectionViewDelegate委托协议和UICollectionViewDataSource数据源协议. UICollectionViewCell是单元格类,它的布局是有UICollectionViewLayout类定义的,它是一个抽

UICollectionView基础

前言 这个控件,看起来与UITableView有点像,而且基本的用法也很相像哦!!! 我们来看看API: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #pragma mark - UICollectionViewDataSource // 指定Section个数 - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { ret

UICollectionView

UICollectionView是Apple在iOS6开始,提供给我们的一个强大的控件.最简单的UICollectionView就是GridView,标准的UICollectionView包含如下几个部分: 1 UICollectionReusableView<SupplementaryView>:可以指定section的Header或者Footer 2 UICollectionViewCell:用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容 再次说明,UICollecti

UICollectionView布局功能

UIConllectionView和UITableView类似,也是展示数据,但不同于UITableView那种规则的布局,UICollectionView可以实现不规则的布局,即瀑布流. 创建UICollectionView UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[[UIScreen mainScreen] bounds] collectionViewLayout:layout];