正确的方法来重用包含UICollectionView的UITableViewCell

时间:2016-01-27 09:30:39

标签: ios swift uitableview

我有一个UITableView。每个单元格包含水平集合视图。当我滚动表时,集合视图包含太多单元格。我想这是因为细胞没有被正确地重复使用。在图示中,灰色细胞不应该在那里。 table view

我应该在reuseCell中放入什么样的代码?我尝试了以下但它使应用程序崩溃

ride func prepareForReuse()
    {
        super.prepareForReuse()
        channelsCollectionView = UICollectionView()
    }

2 个答案:

答案 0 :(得分:2)

应该是

//Reset the datasource
channelsCollectionView.dataSourceArray = []()

//Reload data of collectionView
channelsCollectionView.reloadData()

再取决于它,这是一种做法

答案 1 :(得分:-1)

请按照以下步骤操作。这将在UITableViewCell中完美地完成CollectionView。

  1. 像这样制作 UICollectionView 的子类。

    @interface MyCollectionView : UICollectionView <UICollectionViewDataSource, UICollectionViewDelegate>
    
    /* Properties */
    @property (nonatomic, strong)  NSMutableArray *imagesArray;
    
    @end
    
  2. MyCollectionView .m文件

    @interface MyCollectionView ()
    
    @property (nonatomic, strong) UICollectionViewFlowLayout *flowLayout;
    
    @end
    
    @implementation MyCollectionView
    
    -(void)awakeFromNib {
    
        [super awakeFromNib];
    
        self.dataSource = self;
        self.delegate = self;
    
        //Set CollectionView Layout
        [self setCollectionViewLayout:self.flowLayout];
    }
    
    #pragma mark - CollectionView DataSource methods
    - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
       return 1;
    }
    
    -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
       return _imagesArray.count;
    }
    
    
    -(UICollectionViewFlowLayout *)flowLayout{
    
      // set your layout here
     _flowLayout = [[UICollectionViewFlowLayout alloc] init];
     [_flowLayout setSectionInset:UIEdgeInsetsMake(topSpacing, leftMargin, bottomSpacing, rightMargin)];
     [_flowLayout setMinimumInteritemSpacing:cellSpacing];
     [_flowLayout setMinimumLineSpacing:lineSpacing];
     [_flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
     [_flowLayout setItemSize:CGSizeMake(cellWidth, cellHeight)];
    
     return _flowLayout;
    }
    
    #pragma mark - setter method
    -(void)setImagesArray:(NSMutableArray *)imagesArray {
    
     _imagesArray = imagesArray;
      [self reloadData];
    
    }
    
    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    
       // configure cell here
    
    }
    
  3. ViewController .m中 UITableView

        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
           MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
    
           cell.myCollectionView.imagesArray = //Array here
    
           return cell;
    
         }
    
  4. 您需要在TableViewCell中设置collectionView的修复高度。正如你有水平collectionView。