1、概述

UICollectionView控件主要是用来做九宫格的,类似于android中的GridView控件。其用法与UITableView一样,首先要使控制器遵守数据源协议,再将控制器设置为UICollectionView的数据源。同样,控制器遵守了UICollectionView的代理后也可以实现代理方法等。

2、常用的数据源方法

设置UICollectionViewController一共有多少组:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView

*)collectionView;

设置每组有多少单元格:

- (NSInteger)collectionView:(UICollectionView *)collectionView

numberOfItemsInSection:(NSInteger)section;

设置每个单元格显示的内容:

- (UICollectionViewCell *)collectionView:(UICollectionView

*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

3、常用的代理方法

设置每个单元格点击事件:

- (void)collectionView:(UICollectionView *)collectionView

didSelectItemAtIndexPath:(NSIndexPath *)indexPath

{

MJProduct *p = self.products[indexPath.item];

NSLog(@"点击了---%@", p.title);

}

4UICollectionViewController必须调用的方法

(1)注册cell(告诉collectionView将来创建怎样的cell)

[self.collectionView registerClass:[UICollectionViewCell class]

forCellWithReuseIdentifier:@"product"];

在调用- (UICollectionViewCell *)collectionView:(UICollectionView

*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;设置每个单元格显示的内容(UICollectionViewCell)之前必须注册cell,一般在viewDidLoad中调用上面方法注册cell。

例如:

- (void)viewDidLoad

{

[super viewDidLoad];

// 1.注册cell(告诉collectionView将来创建怎样的cell)

UINib *nib = [UINib nibWithNibName:@"MJProductCell" bundle:nil];

[self.collectionView registerNib:nib forCellWithReuseIdentifier:

MJProductCellID];//通过xid自定义的cell

/*

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJProductCellID];//使用默认的UICollectionViewCell

*/

// 2.设置collectionView的背景色

self.collectionView.backgroundColor = [UIColor whiteColor];

}

 (2)从缓存池中取出cell

- (UICollectionViewCell *)collectionView:(UICollectionView

*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

{

UICollectionViewCell *cell =

[collectionView dequeueReusableCellWithReuseIdentifier:@"product" forIndexPath:indexPath];

return cell;

}

在从缓存池取UICollectionViewCell重用时,不用再判断缓存池是否为空了,它与UITableView不同的是UICollectionView在缓存池没有找到cell时会自动创建新的cell。

(3)重写init方法,创建布局参数

- (id)init

{

// 1.流水布局

UICollectionViewFlowLayout *layout =

[[UICollectionViewFlowLayout alloc] init];

// 2.每个cell的尺寸

layout.itemSize = CGSizeMake(80, 80);

// 3.设置cell之间的水平间距

layout.minimumInteritemSpacing = 0;

// 4.设置cell之间的垂直间距

layout.minimumLineSpacing = 10;

// 5.设置所有cell组成的一个整体与屏幕(ViewController)四周距离

layout.sectionInset =

UIEdgeInsetsMake(layout.minimumLineSpacing, 0, 0, 0);

return [super initWithCollectionViewLayout:layout];

}

如果不创建布局参数程序会报错。一般在重写控制器的init方法中创建。

5UICollectionViewFlowLayout

UICollectionViewFlowLayout称为”流水布局”, 用来约束cell的显示。

常见属性:

Cell的尺寸:

@property (nonatomic) CGSize itemSize;

cell之间的水平间距:

@property (nonatomic) CGFloat minimumInteritemSpacing;

cell之间的垂直间距:

@property (nonatomic) CGFloat minimumLineSpacing;

四周的内边距:

@property (nonatomic) UIEdgeInsets sectionInset;

iOS开发之UICollectionViewController的更多相关文章

  1. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  2. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

  3. iOS开发之UIImage等比缩放

    iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...

  4. iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用

    iOS开发之  Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...

  5. iOS开发之loadView、viewDidLoad及viewDidUnload的关系

    iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系    标题中所说的3个方 ...

  6. iOS开发之info.pist文件和.pch文件

    iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...

  7. iOS开发之WKWebView简单使用

    iOS开发之WKWebView简单使用   iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...

  8. iOS 开发之Block

    iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1.     按钮事件 target action 机制. 它是将一 ...

  9. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

随机推荐

  1. 内功心法 -- java.util.ArrayList<E> (2)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  2. Professional C# 6 and .NET Core 1.0 - 38 Entity Framework Core

    本文内容为转载,重新排版以供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - 38 Entity Framework ...

  3. HDU 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你

    悼念512汶川大地震遇难同胞——一定要记住我爱你 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  4. node.js爬虫杭州房产销售及数据可视化

    现在年轻人到25岁+,总的要考虑买房结婚的问题,2016年的一波房价大涨,小伙伴们纷纷表示再也买不起上海的房产了,博主也得考虑考虑未来的发展了,思考了很久,决定去杭州工作.买房.定居.生活,之前去过很 ...

  5. C#属性和字段

    属性 属性是一种用于访问对象或类的特性的成员.属性是字段的自然扩展,这两者都是具有关联类型的命名成员.而且访问字段和属性的语法是相同的.然而,与字段不同,属性不表示存储位置.相反属性具有访问器,这些访 ...

  6. centos 把网卡名称修改为 eth0

    默认网卡名称是 eno16777736 1.修改配置文件 ifcfg-eno16777736 [root@localhost ~]# cd /etc/sysconfig/network-scripts ...

  7. OpenGL理解

    说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色 ...

  8. 在Angular中,如果权限值是异步请求所得,如何将其设置为HTTP请求头的Authorization?

    遇到此问题的背景:项目需要实现单点登录,在前后端分离的前提下,前台如何保存token值成为了一个问题.想到的解决方案是,将token值统一存到一个前端程序,其他的前端程序去这个前端程序去取token( ...

  9. 用js写出光棒效应的两种方法与jquery的两中方法

    <script src="js/jQuery1.11.1.js" type="text/javascript"></script> &l ...

  10. HFun.快速开发平台(二)=》自定义列表实例(请求参数的处理)

    上编描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /************************************ ...