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