UICollectionView集合视图的概念
如何创建UICollectionView
集合视图的布局UICollectionViewFlowLayout
自定义cell
布局协议UICollectionViewDelegateFlowLayout
UICollectionView与UITableView的实现类似,都需要设置delegate和dataSource
在collectionView中,cell的布局比tableView要复杂,需要使用一个类来描述集合视图的布局---UICollectionViewLayout->UICollectionViewFlowLayout
创建步骤
1.使用系统布局UICollectionViewFlowLayout
2.创建UICollectionView
3.设置代理,设置数据源
4.设置自定义Cell
数据源
我们需要给collectionView指定一个数据源,它负责给对collectionView提供数据与显示
#import "JYFViewController.h"
#import "Model.h"
#import "MyCell.h"
#import "MyHeader.h"
#import "MyFooter.h"
#import "UIImageView+WebCache.h"
@interface JYFViewController ()<</span>UICollectionViewDataSource,UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>
@property (nonatomic, retain) NSMutableArray *allDataArray;
@end
@implementation JYFViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 1.获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data"ofType:@"json"];
// 2.读取文件数据
NSData *data = [NSData dataWithContentsOfFile:filePath];
// 3.解析数据
NSArray *array = [NSJSONSerialization JSONObjectWithData:dataoptions:NSJSONReadingAllowFragments error:nil];
// 4.遍历放入大数组中
self.allDataArray = [NSMutableArray array];
for (NSDictionary *dict in array) {
Model *model = [Model new];
[model setValuesForKeysWithDictionary:dict];
[_allDataArray addObject:model];
[model release];
NSLog(@"%@", _allDataArray);
}
// 1.创建UICollectionViewFlowLayout
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayoutalloc] init];
// 1.1设置每个Item的大小
flowLayout.itemSize = CGSizeMake(90, 210);
// 1.2 设置每列最小间距
flowLayout.minimumInteritemSpacing = 10;
// 1.3设置每行最小间距
flowLayout.minimumLineSpacing = 10;
// 1.4设置滚动方向
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
// 1.5设置header区域大小
flowLayout.headerReferenceSize = CGSizeMake(self.view.bounds.size.width,50);
// 1.6设置footer区域大小
flowLayout.footerReferenceSize = CGSizeMake(self.view.bounds.size.width,50);
// 1.7 设置item内边距大小
flowLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
// 2.创建UICollectionView
UICollectionView *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
// 3.设置数据源代理、collection代理
collectionView.dataSource = self;
collectionView.delegate = self;
[self.view addSubview:collectionView];
[collectionView release];
[flowLayout release];
collectionView.backgroundColor = [UIColor colorWithRed:0.895 green:1.000blue:0.656 alpha:1.000];
// 4.注册cell的类型和重用标示符
[collectionView registerClass:[MyCell class] forCellWithReuseIdentifier:@"cell"];
// 5.注册footer和header类型的重用标识符
[collectionView registerClass:[MyHeader class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView"];
[collectionView registerClass:[MyFooter class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter
withReuseIdentifier:@"footerView"];
}
#pragma mark - UICollectionViewDataSource Methods
#pragma mark 设置有多少个section
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView*)collectionView
{
return 5;
}
#pragma mark 设置某个分组有多少行
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 13;
}
#pragma mark 设置某个Item显示什么内容
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// 1.去重用队列中查找
MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
// 2.使用
// CGFloat red = arc4random()% 256 / 255.0;
// CGFloat green = arc4random() % 256 / 255.0;
// CGFloat blue = arc4random() % 256 / 255.0;
// cell.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
cell.label.text = [NSString stringWithFormat:@"s = %ld r = %ld", indexPath.section, indexPath.row];
// 3.获取将要显示的模型
Model *model = _allDataArray[indexPath.row];
// 4.使用第三方获取图片并自动缓存
NSURL *imageUrl = [NSURL URLWithString:model.thumbURL];
[cell.imageView sd_setImageWithURL:imageUrl placeholderImage:[UIImageimageNamed:@"default_head_image@2x.png"]];
return cell;
}
#pragma mark 处理点击事件
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"我被点击了");
}
#pragma mark - UICollectionViewDelegateFlowLayout Method
#pragma mark 设置item的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(90, 120);
}
#pragma mark 设置footer和header
- (UICollectionReusableView *)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
if (kind == UICollectionElementKindSectionHeader) {
// 去重用队列取可用的header
MyHeader *reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"headerView"forIndexPath:indexPath];
// 使用
reusableView.headerImage.image = [UIImage imageNamed:@"屏幕快照 2014-0 9.30.50 9-11 上午.png"];
// 返回
return reusableView;
}else{
// 去重用队列取可用的footer
MyFooter *reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"footerView"forIndexPath:indexPath];
// 使用
reusableView.backgroundColor = [UIColor redColor];
// 返回
return reusableView;
}
}
#pragma mark 设置header和footer高度
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
return CGSizeMake(self.view.bounds.size.width, 70);
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section
{
return CGSizeMake(self.view.bounds.size.width, 70);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dealloc
{
[_allDataArray release];
[super dealloc];
}
@end
总结:
集合视图UICollectionView和表示图UITableView很相似,可根据layout属性设置,显示单元格集合内容
UICollectionViewDataSource类作为集合视图的数据源,向集合视图提供数据。集合视图依赖于委托(Delegate)中定义的方法对用户进行响应
UICollectionView集合视图的概念的更多相关文章
- UICollectionView 集合视图用法,自定义Cell
在View里面 //1.创建UICollectionViewFlowLayout UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFl ...
- UICollectionView 集合视图 的使用
直接上代码: // // RootViewController.m // // #import "RootViewController.h" #import "Colle ...
- UICollectionView(集合视图)以及自定义集合视图
一.UICollectionView集合视图 其继承自UIScrollView. UICollectionView类是iOS6新引进的API,用于展示集合视图,布局 ...
- iOS:集合视图UICollectionView、集合视图控制器UICollectionViewController、集合视图单元格UICollectionViewCell(创建表格的另一种控件)
两种创建表格方式的比较:表格视图.集合视图(二者十分类似) <1>相同点: 表格视图:UITableView(位于storyboard中,通过UIViewController控制器实现 ...
- 集合视图UICollectionView 介绍及其示例程序
UICollectionView是一种新的数据展示方式,简单来说可以把它理解成多列的UITableView.如果你用过iBooks的话,可 能你还对书架布局有一定印象,一个虚拟书架上放着你下载和购买的 ...
- swift:创建集合视图UICollectionView
swift中创建集合视图和OC中差不多,主要是实现UICollectionViewDataSource数据源协议和UICollectionViewDelegateFlowLayout自定义布局协议,其 ...
- 【推荐】iOS集合视图的可重新排序的layout
在实际项目中你或许会遇到在一个集合视图中移动一项到另外一个位置,那么此时我们需要对视图中的元素进行重新排序,今天推荐一个很好用的第三方类LXReorderableCollectionViewFlowL ...
- 集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍
1 创建集合视图,设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器,系统默认管理着一个集合视图UICollectio ...
- 理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
原文 理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图) UWP 应用多是一个窗口完成所有业务的,事实上我也推荐使用这种单一窗口的方式.不过,总有一些特别的情况下我们需要用到不止一个窗口 ...
随机推荐
- ASP.NET多线程下使用HttpContext.Current为null解决方案 2015-01-22 15:23 349人阅读 评论(0) 收藏
问题一:多线程下获取文件绝对路径 当我们使用HttpContext.Current.Server.MapPath(strPath)获取绝对路径时HttpContext.Current为null,解决办 ...
- .NET Nancy 详解(四) Self Host
Self Host 使得Nancy 能够在任意application 中启动,无论是console 还是windows service.这期我们使用的版本是Nancy v0.4.0. Demo 首先看 ...
- 提高WPF程序性能的几条建议
这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正.) 1. 加快WPF程序的启动速度: (1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码. (2).使用UI虚 ...
- [Java][Weblogic] weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection解决办法
更新20141120: 我始终对修改生产上weblogic上的配置文件这一方法心存担忧(生产上的服务器不允许随便修改,可能会影响到其他应用),所以想使用代码的方式解决此问题,在对方法一失败原因进行了进 ...
- Windows Live Writer技巧
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:今天的内容虽然和开发技术无关,却应该和喜欢写东西的技术人员有关,比如我所有的文章都是用 ...
- APP设计尺寸规范大全,APP界面设计新手教程【官方版】(转)
正值25学堂一周年之际,同时站长和APP设计同仁们在群里(APP界面设计 UI设计交流群,APP界面设计⑥群 APPUI设计③群58946771 APP设计资源⑤群 386032923欢迎大家加入交流 ...
- ZEALER背后的乐视云视频
ZEALER是我非常喜欢的一个测评网站,经常访问看看手机.电动牙刷及机械键盘的测试视频,非常欣赏王自如的数据化测评理念.敬畏之心,以及不祛痘的视频. 刚好最近对网络视频应用比较感兴趣,觉得ZEALER ...
- loj 1032 数位dp
题目链接:http://lightoj.com/volume_showproblem.php?problem=1032 思路:数位dp, 采用记忆化搜索, dp[pos][pre][have] 表示 ...
- DataTables - 问题集
1.增加额外搜索条件 var reqData = {}; var extraSearch = []; var oTable = $('table selector').dataTable({ 'aja ...
- background为圆角的表框,dp转Px,Px转dp
圆角边框<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="ht ...