CollectionView就是这么简单!
UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视图,布局更加灵活,可实现多列布局,用法类似于UITableView 和 UITableViewController 类。
使用UICollectionView 必须实现UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout这三个协议。
1.首先我们创建CollectionView(代码如下)
- (void)initCollectionView
{
// 我是用masnory进行屏幕适配的 这个坐标你也可以直接给出。
[self.collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view.mas_bottom).offset(0);
make.top.offset(0); //顶部间隔
make.left.offset(0);//左边
make.bottom.offset(-10);//底部
make.right.offset(0);//右边
//
}];
self.collectionView.backgroundColor = [UIColor colorWithRed:241 green:241 blue:241 alpha:1];//背景色
self.collectionView.contentInset = UIEdgeInsetsMake(10, 10, 10, 10);//插入内容的位置 与边缘
self.collectionView.delegate = self;代理协议
self.collectionView.dataSource = self;数据源协议
[self.collectionView registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
创建新的cell
}
2.创建collectionview 必须要添加 UICollectionViewFlowLayout
//使用懒加载的方法
- (UICollectionView *)collectionView
{
if (!_collectionView)
{
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake((SCREEN_WIDTH - 50)/4, (SCREEN_WIDTH - 50)/4 + 20);
flowLayout.minimumLineSpacing = 10; 每排的间隔
flowLayout.minimumInteritemSpacing = 10; 每行的间隔
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout];
[self.view addSubview:self.collectionView];
}
return _collectionView;
}
3.接下来 我们需要新建一个类(CollectionviewCell)
cell.h 文件中呢 我们把需要展示的内容 都有属性展示出来
比如 展示一个图片 和文字
@property (nonatomic, strong) UIImageView *familyImageView;
@property (nonatomic, strong) UILabel *titleLabel;
所以 接下来在.m中写这2个控件(我的坐标都是masnory适配 也可以直接给出)
-(instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame])
{
self.familyImageView=[[UIImageView alloc] init];
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.font = [UIFont systemFontOfSize:13];
self.titleLabel.textAlignment=NSTextAlignmentCenter;
[self.contentView addSubview:self.titleLabel];
[self.contentView addSubview:self.familyImageView];
//make 是masnory的一个属性 用于定义坐标位置
[self.familyImageView mas_makeConstraints:^(MASConstraintMaker *make)
{
make.top.offset = 10;
make.left.offset = 10;
make.bottom.equalTo(self.titleLabel.mas_top).offset(-10);
make.right.offset = -10;
}];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make)
{
make.left.offset = 0;
make.bottom.offset = 0;
make.right.offset = 0;
make.height.offset = 20;
}];
}
return self;
}
4.前提工作都基本做完了 接下来 就是实现协议代理的 方法 用来展示内容 显示在屏幕中
//区数
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
//每个区显示的小模块
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return 18;
}
cell 上面展示的内容
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CollectionViewCell*cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
注意上面这个CollectionViewCell 是你新建的cell 名称是一样的
下面就是展示你需要展示的内容了 直接用cell 打点调用就可以用属性了。
cell.familyImageView.image = _arr[indexPath.row];这是我之前定义的一个图片
cell.titleLabel.text=nameArr[indexPath.row];label
return cell;
}
cell的点击方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
}
大致就是这些了,愿猿友们早日迎娶白富美,走向人生peak!
CollectionView就是这么简单!的更多相关文章
- 第19月第2天 cellForItemAtIndexPath 返回空
1. 动画需要获取当前的 Cell ,下面的调用在 viewDidLoad 中,有时候返回 nil,有时候成功. UICollectionView *cell = (UICollectionView* ...
- iOS-UICollectionView快速构造/拖拽重排/轮播实现
代码地址如下:http://www.demodashi.com/demo/11366.html 目录 UICollectionView的定义 UICollectionView快速构建GridView网 ...
- Swift 使用CollectionView 实现图片轮播封装就是这样简单
前言: 这篇你可以学会自定义视图,创建collectionView,协议的使用,定时器; 自制图片 先上Demo:Github上封装好的下载即用, 好用请Star Thanks首先新建一个继承于UIV ...
- 用collectionview实现瀑布流-转(后面附demo,供参考)
算法总体思路 先说一下总体上的思路.既然图片的大小.位置各不一样,我们很自然地会想到需要算出每个item的frame,然后把这些frame赋值给当前item的UICollectionViewLayou ...
- CollectionView水平和竖直瀑布流的实现
最近在项目中需要实现一个水平的瀑布流(即每个Cell的高度是固定的,但是长度是不固定的),因为需要重写系统 UICollectionViewLayout中的一些方法通过计算去实现手动布局,所以本着代码 ...
- IOS自定义日历控件的简单实现(附思想及过程)
因为程序要求要插入一个日历控件,该空间的要求是从当天开始及以后的六个月内的日历,上网查资料基本上都说只要获取两个条件(当月第一天周几和本月一共有多少天)就可以实现一个简单的日历,剩下的靠自己的简单逻辑 ...
- collectionView布局原理及瀑布流布局方式
一直以来都想研究瀑布流的具体实现方法(起因是因为一则男女程序员应聘的笑话,做程序的朋友应该都知道).最近学习到了瀑布流的实现方法,瀑布流的实现方式有多种,这里应用collectionView来重写其U ...
- 用collectionview实现瀑布流-转
算法总体思路 先说一下总体上的思路.既然图片的大小.位置各不一样,我们很自然地会想到需要算出每个item的frame,然后把这些frame赋值给当前item的UICollectionViewLayou ...
- iOS-UICollectionView的简单使用(原创)
前言 UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最简单的形式).如果你用过iBook ...
随机推荐
- Linux内核学习笔记1——系统调用原理【转】
1什么是系统调用 系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口.用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文 ...
- weekend110(Hadoop)的 第四天笔记
(2015年1月18日) 课程目录 01-复习 02-hadoop中的序列化机制 03-流量求和mr程序开发 04-hadoop的自定义排序实现 05-mr程序中自定义分组的实现 06-shuffle ...
- 排列组合函数next_permutation()
next_permution(),按照字典序进行排列组合, 括号里的参数为类似sort里面的参数,用法相同 #include <bits/stdc++.h> using namespace ...
- express4.x 路由中间件
路由中间件必须通过app挂载到对应的路由上,如: var express = require('express'); var router = express.Router(); var app = ...
- VIM中的正则表达式及替换命令
VIM中的正则表达式及替换命令 一.使用正则表达式的命令 使用正则表达式的命令最常见的就是 / (搜索)命令.其格式如下: /正则表达式 另一个很有用的命令就是 :s(替换)命令,将第一个//之间的正 ...
- 【OpenCV】基于kmeans的细胞检测方法
问题是这样的,有一幅经过二值化处理之后的图像,我们希望统计其中细胞的个数,和不同粘连情况的细胞个数,比如,下图中有1个细胞组成连通区域的,也有2个细胞组成连通区域的,也有更多个细胞组成连通区域的,我们 ...
- 用bat文件将本地sql在远程oracle上执行
最近在在搭建一个数据库的测试环境,需要初始化一些数据库脚本.因为内容比较多,分为很多个sql文件.现准备写一个bat文件,经过百度一番,终于搞定.如下: 1. 新建一个文件夹,将初始化的脚本文件全部放 ...
- javascript朝花夕拾
(一)javascript中的数组index属性——获取数组的索引值 例如:要做到这样的效果 点击每个选项时,会显示不同的div. 我们的做法:在javascript中,先把所有的div的displa ...
- sort()排序 collections.sort();
1.main方法: public class Test { public static void main(String[] args) { /** * * sort()方法详解 * 1.Collec ...
- Lua的安装
Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施. Lua 也能对面向对象编程,函数式编程,数据驱动式编程提供很好的支持.它可以作为一个强大.轻量的脚本语言 ...