文档章节

iOS开发之UICollectionViewController

feng_blog
 feng_blog
发布于 2015/08/31 20:52
字数 576
阅读 96
收藏 0

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开发之Run Loop
下一篇: iOS开发之JSON解析
feng_blog

feng_blog

粉丝 120
博文 130
码字总数 105422
作品 3
朝阳
iOS工程师
私信 提问
UIWebView和UICollectionViewController

UIWebView和UICollectionViewController的使用 UIWebView UIWebView是iOS内置的浏览器的控件, 可以浏览网页, 打开文档等 .系统自带的Safari浏览器就是通过UIWebView实现的, 能够加载html/ht...

傲风凌寒
2014/06/02
430
0
iOS 学习资料整理

视频教程(英文) Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频 iPad and iPhone Applic...

拉偶有所依
2015/01/19
2.5K
5
好坏美丑,开发者眼中的 iOS 7

跟着新 iPhone 发布的节奏,iOS 史上转变最大的 iOS 7 将要在苹果的各类新产品上大展拳脚了。从消费者眼里看来,这种转变是拟物化向扁平化的转变和新加入的控制中心等。但是对于开发者而言,...

oschina
2013/08/29
5.3K
42
Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序

Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序 C#原本是用来编写Windows以及Windows Phone的应用程序。自从Xamarin问世后,C#的作用就发生了很大的变化。它不仅可以编写关于Windows...

大学霸
2014/10/23
989
0
iOS 7 开发:设置 Xcode 5 和 iOS 7 SDK

对新的iOS开发者,改变是好的 正如我之前的文章所提及的, iOS 7 代表的不止是苹果改变他们的移动设备的UI;它也代表了对延缓学习怎样开始建立原生iOS应用的开发者的一个机会. iOS 7 是最新的...

oschina
2013/06/19
11K
0

没有更多内容

加载失败,请刷新页面

加载更多

浅谈Visitor访问者模式

一、前言 什么叫访问,如果大家学过数据结构,对于这点就很清晰了,遍历就是访问的一般形式,单独读取一个元素进行相应的处理也叫作访问,读取到想要查看的内容+对其进行处理就叫作访问,那么...

青衣霓裳
29分钟前
6
0
JS内嵌多个页面,页面之间如何更快捷的查找相关联的页面

假设parent为P页面, P页面有两个子页面,分别为B页面和C页面; B页面和C页面分别内嵌一个iframe,分别为:D页面和E页面 现在通过B页面的内嵌页面D的方法refreshEpage(eUrl)来加载内嵌页面E的内容...

文文1
30分钟前
7
0
Hibernate 5 升级后 getProperties 错误

升级到 Hibernate 5 后,提示有错误: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; 完整的错误栈为: java.lang.NoSuchMethodError: org.hibernate......

honeymoose
32分钟前
6
0
mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
35分钟前
7
0
Spring中BeanFactory与FactoryBean的区别

在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混。 一、BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定...

大王叫下
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部