tableView与collectionView区别讲义

一句毫不夸张的话,同学们用tableView这个控件可能不亚于你使用label ,button这些控件,真的,用的太多了,那个项目中不是含有多个tableView啊?可是集合视图collectionView呢?说真的,我之前感觉根本就用不上这个控件,自己之前写过demo,但是项目中还真没用过,前不久一个需求用到了集合视图,真是有点书到用时方恨少啊,不会用。。。不会用没关系,摸索一下,看看它的API,看看它的官方文档,其实还真就这么回事,但是比tableView要复杂,相对来说也比较难,本人建议,可以用tableView的,别想着用collectionView。好了,切入正题:

1.遵守协议不同

表视图:UITableViewDelegate,UITableViewDataSource集合视图

集合视图:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout

2.注册cell不同

表视图:可以选择性地注册,可以选择注册,也可以选择不注册,可以移步我另一篇博客,关于table的cell注册问题:tableViewCell详说registerNib: 与 registerClass: 的区别

集合视图:它是必须注册的,没有什么选择,如果非说有选择,那就是你选择用XIB来创建cell,还是纯代码来创建cell。两个方法:

[_mCollectionViewregisterClass:[YUCollectionViewCellclass] forCellWithReuseIdentifier:cellId];

 [_mCollectionViewregisterNib:[UINibnibWithNibName:NSStringFromClass([YUCollectionViewCellclass]) bundle:nil]forCellWithReuseIdentifier:cellId];


3.用途不同

表视图:主要是我们常见的布局,一行行的往下排列,就像表格一样,可以自定义每一行的样式(自定义cell)。

集合视图:主要是一些不规则的布局,一个view上,横竖都有多个控件,大小不一,可以用UICollectionViewDelegateFlowLayout 来帮忙处理。

探讨:

1.有同学可能会说,我现在的collectionView可以满足一切需要tableView的需求,换句话说 collectionView可以取代tableView。

这句话前半句不假,tableView能干的事 collectionView都可以干,但是苹果为什么没有废弃掉tableView呢?总归是有道理的,在我看来,collectionView能做tableView的事,可是当我们接到一个需求,一眼就感觉tableView做比较简单的时候,非要用collectionView来做是不是多此一举,还是那句话,collectionView比较麻烦,也没有tableView好用。我们在做项目的时候,还是表视图用的多。

2.有这么一个需求,横滑的view,里边是一张张图片,这个时候我们用什么做?

1.可以用tableView,这个横滑的,和竖滑的一样,无非就是方向变了,于是我这么做了:

在创建表视图的时候加上这么一句:

 _mTableView.transform =CGAffineTransformMakeRotation(-M_PI/2); 目的就是为了让table旋转过来。

在cell布局的时候加上这么一句:

cell.transform =CGAffineTransformMakeRotation(M_PI/2); 目的是cell也转过来

2.我可以用scrollView,上边画上一个个的view。

3.我可以用collectionView。

怎么做呢? 不说废话,上代码:

- (instancetype)initWithFrame:(CGRect)frame {

    if (self = [superinitWithFrame:frame]) {

        [selfaddSubview:self.mCollectionView];

    }

    return self;

}


- (UICollectionView *)mCollectionView {

    if (!_mCollectionView) {

       UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayoutalloc] init];

        flowLayout.scrollDirection =UICollectionViewScrollDirectionHorizontal;

     //   flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; //类似tableView的视图看横向item的个数

       _mCollectionView = [[UICollectionViewalloc] initWithFrame:CGRectMake(0,200, self.frame.size.width,cellHeight)collectionViewLayout:flowLayout];

       _mCollectionView.backgroundColor = [UIColorwhiteColor];

        [_mCollectionViewregisterClass:[YUCollectionViewCellclass] forCellWithReuseIdentifier:cellId];

       _mCollectionView.delegate =self;

       _mCollectionView.dataSource =self;

    }

    return _mCollectionView;

}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

    return50;

}


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    YUCollectionViewCell *cell = (YUCollectionViewCell *)[collectionViewdequeueReusableCellWithReuseIdentifier:cellIdforIndexPath:indexPath];

    cell.delegate =self;

    return cell;

}


- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    //每个item的大小

    returnCGSizeMake(200,50);

}


- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"________%d",indexPath.row);

}

上边三种方法,我是极力推崇最后一种,横向滑动的任何需求都可以通过第三种方法来做,还简单明了,这可能就是collectionView的用武之地吧。

对了,还有一个点说一下:UICollectionView有两个属性:

@property (nonatomic) CGFloat minimumLineSpacing;

@property (nonatomic) CGFloat minimumInteritemSpacing;

这两个属性就是设置item之间的间隔的,有一点需要注意, 这两个属性都有一个默认值,都是10


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值