tableview 嵌套 collectionView

作者: 贼海鸥 | 来源:发表于2017-04-01 17:25 被阅读0次

这两天,项目中有一个collectionView嵌套在tableView中的一个cell上,就试着写了一下.不讲什么大道理了,直接上.(大神勿喷,技术有限,纯粹提供一个思路_)

  • 首先,获取到collectionView的item的数据,得到item的个数
  • 第二步,根据item的个数,得到tableView的cell的高度
  • 第三步,将collectionview添加到既定的cell上
  • 最后一步,将collectionview设置为不能滑动
    OK,直接上代码
// 保存item数据的数组
@property (nonatomic , strong) NSMutableArray *dataArray;

如果要是一行显示两个item,item的高度是120
那么,cell的高度

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
      return self.dataArray.count / 2 * 120;
}

将UICollectionView添加到cell上

CGFloat width = cell.frame.size.width;
        UICollectionViewFlowLayout *flowLayout = [UICollectionViewFlowLayout new];
        UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, width, self.dataArray.count / 2 * 120) collectionViewLayout:flowLayout];
        collectionView.backgroundColor = [UIColor whiteColor];
        collectionView.delegate = self;
        collectionView.dataSource = self;
        [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collection"];
        flowLayout.itemSize = CGSizeMake((width - 10) / 2, 120);
        collectionView.scrollEnabled = NO;
        [cell.contentView addSubview:collectionView];

遵循UICollectionViewDelegate & UICollectionViewDataSource

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.dataArray.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *ID = @"collection";
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ID forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[UICollectionViewCell alloc] init];
    }
    cell.contentView.backgroundColor = [UIColor redColor];
    return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"*****%@" , indexPath);
}

点击item,显示的数据

0D34E4D3-7A03-4E75-AA05-A06F9D8DC0DB.png

搞定.下面是模拟器的截图


CE5A9835-960F-449B-AA4D-2F64F2C4E40D.png

注意:在cell上添加collectionView的时候,collectionView不要写成懒加载的方式.要不然会造成UITableViewCell拉长,但是UIcollectionView不会改变frame


git下载地址
https://github.com/lHuaixuan/UITableView-UICollectionView.git

相关文章

网友评论

    本文标题:tableview 嵌套 collectionView

    本文链接:https://www.haomeiwen.com/subject/yaoiottx.html