说明:
UICollectionView类似UITableVIew,可实现横向或纵向排列,还可实现每行Item使用不同的布局,类试于android中的RecyclerView。
横向排列:选中UICollectionView -> 右侧属性面板Scroll Direction -> Vertical
纵向排列:选中UICollectionView -> 右侧属性面板Scroll Direction -> Horizontal
使用:
一、创建UICollectionView列表控件,重写3个方法,设置行数、列数,以及每个cell的view:
1.选中Main.storyboard,将UICollectionView控件拖入视图中,可以右侧尺子面板中调整控件大小与每个item的Cell Size(itemView宽高),右击此控件,在弹出菜单按住dataSource和delegate拖线到ViewController上,并在ViewController.m中实现代理接口类:
@interface ViewController () <UICollectionViewDataSource, UICollectionViewDelegate>
//列表控件
@property (weak, nonatomic) IBOutlet UICollectionView *listRv;
@end
2.造列表数据:
//数据列表
@property (nonatomic, strong) NSMutableArray *list;
/*
懒加载,创建假列表数据
*/
- (NSMutableArray *)list{
if(_list == nil){
_list = [NSMutableArray array];
UserInfo *item1 = [[UserInfo alloc] init];
item1.name = @"姓名1";
item1.desc = @"描述1";
[_list addObject:item1];
UserInfo *item2 = [[UserInfo alloc] init];
item2.name = @"姓名2";
item2.desc = @"描述2";
[_list addObject:item2];
UserInfo *item3 = [[UserInfo alloc] init];
item3.name = @"姓名3";
item3.desc = @"描述3";
[_list addObject:item3];
UserInfo *item4 = [[UserInfo alloc] init];
item4.name = @"姓名4";
item4.desc = @"描述4";
[_list addObject:item4];
UserInfo *item5 = [[UserInfo alloc] init];
item5.name = @"姓名5";
item5.desc = @"描述5";
[_list addObject:item5];
UserInfo *item6 = [[UserInfo alloc] init];
item6.name = @"姓名6";
item6.desc = @"描述6";
[_list addObject:item6];
}
return _list;
}
3.重写numberOfSectionsIncollectionView方法设置重复次数:
/*
UICollectionView方法:设置重复次数
*/
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
//返回1表示不重复显示
return 1;
}
4.重写collectionView-numberOfItemsInSection方法设置item view显示的个数:
/*
UICollectionView方法:设置item view显示的个数
*/
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return self.list.count;
}
4.重写collectionView-cellForItemAtIndexPath方法创建itemView:
/*
UICollectionView方法:创建itemView,并返回(类试android中的getView)
*/
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
//根据设置的id值(itemView为自定义id),创建或获取每行的自定义CollectionViewCell
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"itemView" forIndexPath:indexPath];
//设置每行数据
[cell setData:self.list[indexPath.item]];
return cell;
}
5.注册自定义cell类,需要将cell类与ReuseIdentifier值绑定,ReuseIdentifier为cell的xib属性值:
- (void)viewDidLoad {
[super viewDidLoad];
//注册自定义cell类
[self.listRv registerNib:[UINib nibWithNibName:@"CollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"itemView"];
}
二、创建UICollectionViewCell控件+控制器类:
1.创建xib(选Empty项),打开视图,拖入UICollectionViewCell控件,并在拖入item的一些需要的控件。
选中xib布局,在Collection Reusable View -> identifier中输入id值,用于创建cell类时使用。
2.创建自定义控制类,继承UICollectionViewCell,创建item各view的引用,并增加设置数据方法,供外部调用:
CollectionViewCell.h:
// CollectionViewCell.h
#import <UIKit/UIKit.h>
#import "UserInfo.h"
@interface CollectionViewCell : UICollectionViewCell
//供外部调用,设置item数据
- (void)setData:(UserInfo *)item;
@end
CollectionViewCell.m:
// CollectionViewCell.m
#import "CollectionViewCell.h"
@interface CollectionViewCell()
//姓名控件
@property (weak, nonatomic) IBOutlet UILabel *nameTv;
//描述控件
@property (weak, nonatomic) IBOutlet UILabel *descTv;
@end
@implementation CollectionViewCell
/*
供外部调用,设置item数据
*/
- (void)setData:(UserInfo *)item{
//给姓名控件设置显示内容
self.nameTv.text = item.name;
//给描述控件设置显示内容
self.descTv.text = item.desc;
}
@end