我有一个UITableView。每个单元格包含水平集合视图。当我滚动表时,集合视图包含太多单元格。我想这是因为细胞没有被正确地重复使用。在图示中,灰色细胞不应该在那里。
我应该在reuseCell中放入什么样的代码?我尝试了以下但它使应用程序崩溃
在
ride func prepareForReuse()
{
super.prepareForReuse()
channelsCollectionView = UICollectionView()
}
答案 0 :(得分:2)
应该是
//Reset the datasource
channelsCollectionView.dataSourceArray = []()
//Reload data of collectionView
channelsCollectionView.reloadData()
再取决于它,这是一种做法
答案 1 :(得分:-1)
请按照以下步骤操作。这将在UITableViewCell中完美地完成CollectionView。
像这样制作 UICollectionView 的子类。
@interface MyCollectionView : UICollectionView <UICollectionViewDataSource, UICollectionViewDelegate>
/* Properties */
@property (nonatomic, strong) NSMutableArray *imagesArray;
@end
在 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
}
在 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;
}
您需要在TableViewCell中设置collectionView的修复高度。正如你有水平collectionView。