ChildModel.h

#import <Foundation/Foundation.h>

@interface ChildModel : NSObject

@property (nonatomic, strong) NSString *imageString;

@property (nonatomic, strong) NSString *nameString;

- (instancetype)initWithDic:(NSDictionary *)dic;

@end

ChildModel.m

#import "ChildModel.h"

@implementation ChildModel

- (instancetype)initWithDic:(NSDictionary *)dic
{
self = [super init];
if (self)
{
_imageString = dic[@"image"];
_nameString = dic[@"name"];
}
return self;
} @end

JFCell.h

#import <UIKit/UIKit.h>
#import "ChildModel.h" @interface JFCell : UICollectionViewCell @property (nonatomic ,strong) UIImageView *cellImageView; @property (nonatomic ,strong) UILabel *cellLabel; - (void)updateJFCellWithObj:(ChildModel *)childObj; @end

JFCell.m

#import "JFCell.h"

@implementation JFCell
@synthesize cellImageView,cellLabel;
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
self.cellImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , frame.size.width, frame.size.height-)];
self.cellImageView.backgroundColor = [UIColor brownColor];
[self addSubview:self.cellImageView]; self.cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(, frame.size.height-, frame.size.width, )];
self.cellLabel.backgroundColor = [UIColor lightGrayColor];
self.cellLabel.font = [UIFont systemFontOfSize:];
self.cellLabel.textAlignment = NSTextAlignmentCenter;
[self addSubview:self.cellLabel];
}
return self;
} - (void)updateJFCellWithObj:(ChildModel *)childObj
{
self.cellImageView.image = [UIImage imageNamed:childObj.imageString];
self.cellLabel.text = childObj.nameString;
}
@end

ViewController.m

#import "ViewController.h"
#import "JFCell.h" //每行的cell个数
#define counts 3
//边距
#define margin 5 static NSString *cellString = @"cell"; @interface ViewController ()<UICollectionViewDataSource,UICollectionViewDelegate>
{
UICollectionView *JFCollectionView;
NSMutableArray *childArray;
} @end @implementation ViewController - (void)viewDidLoad
{
[super viewDidLoad];
childArray = [[NSMutableArray alloc] init];
//添加视图
[self addCollectionView];
//请求数据
[self requestData]; //-------------------①用户请求
} - (void)addCollectionView
{
CGFloat cellWidch = ([[UIScreen mainScreen] bounds].size.width-(counts+)*margin)/counts;
//专门负责布局的类
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
//滑动方向(纵向)
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
//元素的size
flowLayout.itemSize = CGSizeMake(cellWidch, cellWidch+);
//元素的横向间距
flowLayout.minimumLineSpacing = margin;
//元素的纵向间距
flowLayout.minimumInteritemSpacing = margin;
//组距离 视图边上下左右的距离
flowLayout.sectionInset = UIEdgeInsetsMake(margin, margin, margin, margin);
JFCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(, , [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height) collectionViewLayout:flowLayout];
JFCollectionView.backgroundColor = [UIColor whiteColor];
JFCollectionView.dataSource = self;
JFCollectionView.delegate = self;
//注册cell,重用
[JFCollectionView registerClass:[JFCell class] forCellWithReuseIdentifier:cellString];
[self.view addSubview:JFCollectionView];
}
#pragma mark ----------------------UICollectionViewDataSource-------------------
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return childArray.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
JFCell *cell = [JFCollectionView dequeueReusableCellWithReuseIdentifier:cellString forIndexPath:indexPath];
//根据数据更新视图
[cell updateJFCellWithObj:childArray[indexPath.row]]; //------④更新视图,响应用户请求
return cell;
} - (void)requestData
{
//构造虚拟数据(通常是从网络服务器获取到Json数据)
NSArray *dataArray = @[
@{@"image":@"1.jpg",@"name":@"小美"},
@{@"image":@"2.jpg",@"name":@"小娜"},
@{@"image":@"4.jpg",@"name":@"小明"},
@{@"image":@"3.jpg",@"name":@"小娜"},
@{@"image":@"1.jpg",@"name":@"小美"},
@{@"image":@"5.jpg",@"name":@"小娜"},
@{@"image":@"6.jpg",@"name":@"小美"},
@{@"image":@"7.jpg",@"name":@"小娜"},
@{@"image":@"8.jpg",@"name":@"小苏"},
@{@"image":@"2.jpg",@"name":@"小娜"},
@{@"image":@"3.jpg",@"name":@"小娜"},
@{@"image":@"1.jpg",@"name":@"小娜"},
@{@"image":@"3.jpg",@"name":@"小娜"},
@{@"image":@"4.jpg",@"name":@"小娜"},
@{@"image":@"5.jpg",@"name":@"小娜"},
];
for (NSDictionary *dic in dataArray)
{
ChildModel *model = [[ChildModel alloc] initWithDic:dic]; //----------②请求更新数据
[childArray addObject:model];
}
//得到数据后更新视图
[JFCollectionView reloadData]; //------------③通知视图更新
}
@end

UICollectionView的简单使用的更多相关文章

  1. UICollectionView 很简单的写个瀑布流

    你项目中要用到它吗? 可能会在你的项目中用到这玩意,最近也是要用就简单的写了一个 Demo.没多少代码,就不放Git了,下面会详细点的说说代码的,要还有什么问题的小伙伴可以直接Q我,也可以把Demo发 ...

  2. UICollectionView的简单认识和简单实用

    摘要 UICollectionView是比UITableView更加复杂的UI控件,通过它可以实现许多复杂的流布局.但对我们来说,系统提供的接口十分简单易用,并且有十分强的制定性. iOS流布局UIC ...

  3. iOS 流布局 UICollectionView使用(简单使用)

    简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似.简单来说,UICollectionView是比UI ...

  4. UICollectionView的简单使用和常用代理方法

    UICollectionView相对于UITableView有更加自由的布局,做出的界面可变性更大最近开始接触使用UICollectionView,整理了一下常用的代理方法 首先需要先添加UIColl ...

  5. UICollectionView进阶练习

    上一篇中的干货看完,不觉感觉还是有点虚,今天我们来点实的,做了两个小DEMO,源码已放GitHub,主要是针对UICollectionView做了联系.第一个DEMO是针对UICollectionVi ...

  6. iOS流布局UICollectionView使用FlowLayout进行更灵活布局

    一.引言 前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout没有着重探讨,这篇博客介绍关于布局的相关设置和 ...

  7. IOS客户端Coding项目记录导航

    IOS客户端Coding项目记录(一) a:UITextField设置出现清除按键 b:绘画一条下划线  表格一些设置 c:可以定义表头跟底部视图(代码接上面) d:隐藏本页的导航栏 e:UIEdge ...

  8. IOS客户端Coding项目记录(二)

    9:第三方插件整理 JSON转实体:jsonModel https://github.com/icanzilb/JSONModel/ 美化按键:BButton https://github.com/m ...

  9. iOS-UICollectionView快速构造/拖拽重排/轮播实现

    代码地址如下:http://www.demodashi.com/demo/11366.html 目录 UICollectionView的定义 UICollectionView快速构建GridView网 ...

随机推荐

  1. [Xcode使用 - 2] 设置APP图标和启动画面

    1.App Icon   把所有图标文件拖放到 “Images.xcassets” 的”AppIcon” 里面     应对非视网膜和视网膜屏,APP有时会提供两套不同大小的图片,1倍图和2倍图,它们 ...

  2. IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别(附代码)

    进程:正在进行中的程序被称为进程,负责程序运行的内存分配;每一个进程都有自己独立的虚拟内存空间 线程:线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一条线程,即主线程 队列 dispa ...

  3. Struts2中DMI(动态方法调用)的错误问题(There is no Action mapped for namespace [/xxx] and action name [xxx!yyy] a)

    默认的Struts.xml中是这样的 <constant name="struts.enable.DynamicMethodInvocation" value="f ...

  4. [置顶] [BZOJ]2127: happiness 最小割

    happiness: Description 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己 ...

  5. ECshop数据库的访问统计和管理员日志的清空

    ECshop是个不错的系统,但是它有一定漏洞,若是访问量巨大的话,大量的访问统计代码会存入数据库的ecs_stats表中,甚至几天就可以达到几百兆,严重的网站直接就崩溃了.数据备份的时候也有很多不便, ...

  6. iOS 限制textField输入的长度

    1.电话号码(带3-3-4效果) //指定代理 self.phoneTextField.delegate = self; //当编辑改变的时候,进行字符校验 [self.phoneTextField ...

  7. Linux安装JDK详细步骤

    Linux安装JDK步骤 1.先从网上下载jdk(jdk-7u1-linux-i586.rpm),下载地址:http://www.oracle.com/technetwork/java/javase/ ...

  8. 《JavaScript高级程序设计》 读书笔记(一)

    标签的位置 按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,例如: <!DOCTYPE html> <html> <h ...

  9. vs2005升级到vs2010相关问题

    1.项目编译失败,报 Resgen.exe 退出 ,错误代码2 处理方式: http://jingyan.baidu.com/article/90895e0fe80c6064ed6b0b6b.html ...

  10. iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)

    实现过程: 1.在应用程序的Info.plist文件中添加Application supports iTunes file sharing键,并将键值设置为YES. - (void)viewDidLo ...