iOS:UICollectionView使用

说明:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值