UI 18 UICollectionView

UICollectionView 是 tableView 的升级版!

#import "ViewController.h"
#import "MyCell.h"
#import "UIImageView+WebCache.h"
#import "MyCollectionReusableView.h"

@interface ViewController ()<UICollectionViewDataSource, UICollectionViewDelegate>
@property(nonatomic, retain)NSMutableArray *arr;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // UICollectionView 他是苹果官方提供的一种瀑布效果.

    // 每一个用来显示的item它的尺寸有多大.
    UICollectionViewFlowLayout *flowLayOut = [[UICollectionViewFlowLayout alloc] init];
    flowLayOut.itemSize = CGSizeMake(118, 210);
    // 设置一下行间距
    flowLayOut.minimumLineSpacing = 10;
    // 列间距
    flowLayOut.minimumInteritemSpacing = 10;

   // // 设置默认滚动方向, 默认是垂直方向.
   // flowLayOut.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    // 设定头或者尾视图尺寸
    flowLayOut.headerReferenceSize = CGSizeMake(0, 80);




    UICollectionView *collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0,64, 375, 667 - 64) collectionViewLayout:flowLayOut];
    // 接下来就是和tableView很相似,使用前需要前两个协议.

    collection.delegate = self;
    collection.dataSource = self;
    [self.view addSubview:collection];
    [collection release];

    // 通过注册的方式,创建Cell.
    // 第一个参数: 需要制定注册对象的类型
    // 第二个参数: 重用池的标志.
    [collection registerClass:[MyCell class] forCellWithReuseIdentifier:@"reuse"];

    //注册一个头视图
    // 第一个参数:
    // 第二个参数: 指定是头视图还是尾视图,常量字符串在系统的UICollectionViewFlowLayout类的最上面
    // 第三个参数: 重用标志

    [collection registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView"];


    [self createData];
}

// 创建头视图
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
        MyCollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerView" forIndexPath:indexPath];
        view.myLabel.text = @"哼哼";
        view.myLabel.textColor = [UIColor cyanColor];
        return view;
    }else {
        return nil;
    }
}

#warning 使用注册的方式创建的cell,必须使用自定义的cell,否则会在里面重复大量的创建视图(tableViewli的cell,在外面创建一个按钮加进去是应为按钮和Cell一同进入重用池),未来了杜绝重复创建,必须使用自定义cell.
- (void)createData{

    NSString *path = [[NSBundle mainBundle]pathForResource:@"Data" ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSMutableArray *Aarr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    self.arr = [NSMutableArray array];
    for (NSMutableDictionary *temp in Aarr) {
        [self.arr addObject:temp[@"thumbURL"]];
    }

}

// 和TableView一样,有两个必须要实现的方法.
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return self.arr.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
#warning 在CollectionCell的创建时候,提供了另外一种不同于tableView的Cell创建方式.

    MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"reuse" forIndexPath:indexPath];
    // 只有通过注册的方式创建的cell,在取值的时候就不需要就不需要在进行是否为空的判断.
    cell.contentView.backgroundColor = [UIColor redColor];

    NSString *temp = self.arr[indexPath.item];
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:temp]];
    cell.label.text =[NSString stringWithFormat:@"%ld",indexPath.row];
    return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值