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. win10 64位安装mysql

    原文地址:http://blog.csdn.net/kingyumao/article/details/51925795

  2. 虚方法(virtual)和抽象方法(abstract)的区别

    注:本文转载自 http://www.cnblogs.com/michaelxu/archive/2008/04/01/1132633.html 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别 ...

  3. android widget的中文文档

    下文是我翻译于 App Widgets的文章,如果有不当之处请大家指出 app widget是一种嵌入在其他应用(例如主屏幕)和并且能偶接受间接性更新的小应用,你可以自己提供app widget pr ...

  4. IEnumerable和IEnumerator 详解

    初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下 ...

  5. CentOS 下SSH无密码登录的配置

    CentOS 下SSH无密码登录的配置 最近学习Hadoop.它要求各节点之间通过SSH无密码登录,配置SSH的时候费了一番功夫,记录下来,以备忘. 配置SSH无密码登录需要3步: 1.生成公钥和私钥 ...

  6. error: variable '__this_module' has initializer but incomplete type错误解决

    版权所有,转载必须说明转自 http://my.csdn.net/weiqing1981127 原创作者:南京邮电大学  通信与信息系统专业 研二 魏清 问题描述:使用SAM9X25  内核版本是2. ...

  7. java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  8. cocos2d-x Sprite

    转自:http://codingnow.cn/cocos2d-x/795.html 精灵是游戏中十分重要的组成部分,随处可见,如:游戏背景.NPC.人物.道具等.在cocos2d-x引擎中,只要是用图 ...

  9. ios常用动画

    // // CoreAnimationEffect.h // CoreAnimationEffect // // Created by VincentXue on 13-1-19. // Copyri ...

  10. MySQL和PostgreSQL 导入数据对照

    在虚拟机上測评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 由于是虚拟机上的測评,所以时间仅仅做參考,不要太较真, 看看就好了.MySQL 工具:    1. 自带 ...