UICollectionView - 不要添加新的自定义单元格

Posted

技术标签:

【中文标题】UICollectionView - 不要添加新的自定义单元格【英文标题】:UICollection View - Dont adds new custom cells 【发布时间】:2018-10-03 09:17:57 【问题描述】:

我在视图中有一个 collectionView。我确实设置了 hte 数据源、委托和一切。

这个单元正在工作:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    UICollectionViewCell *cell = [self.collectionAddedMembers dequeueReusableCellWithReuseIdentifier:cellReuseIdentifierAdded forIndexPath:indexPath];
    cell.backgroundColor = [colores objectAtIndex:arc4random_uniform(6)];
    return cell;

但在我的自定义单元格 AdditionalMemberCollectionViewCell 上,它不会添加新单元格:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    AddedMemberCollectionViewCell *cell = [self.collectionAddedMembers dequeueReusableCellWithReuseIdentifier:cellReuseIdentifierAdded forIndexPath:indexPath];
    NSArray *firstSection = [selectedMembersData objectAtIndex:0];
    SelectedContacto *cellData = [firstSection objectAtIndex:indexPath.row];
    NSMutableDictionary *dataForConfigure = [[NSMutableDictionary alloc] init];
    [dataForConfigure setObject:cellData.contactAvatar forKey:@"contactAvatar"];
    [dataForConfigure setObject:cellData.contactName forKey:@"contactName"];
    [dataForConfigure setObject:cellData.memberId forKey:@"contactName"];
    [cell configure:dataForConfigure];
    return cell;

这是自定义单元格的代码。

.h 文件:

@interface AddedMemberCollectionViewCell : UICollectionViewCell
@property (nonatomic) IBOutlet UIImageView *avatar;
@property (nonatomic) IBOutlet UILabel *memberName;
@property (nonatomic) IBOutlet UIButton *removeMember;
@property (nonatomic) NSNumber *memberId;
- (void) configure:(NSDictionary*)cellData;
@end

.m 文件

#import "AddedMemberCollectionViewCell.h"

@implementation AddedMemberCollectionViewCell
- (void) configure:(NSDictionary*)cellData 
    self.avatar = [cellData objectForKey:@"contactAvatar"];
    self.memberName = [cellData objectForKey:@"contactName"];
    self.memberId = [cellData objectForKey:@"memberId"];

@end

我可以提供更多代码,但我认为没有必要。这里发生了什么?

编辑:

在 viewDidLoad 中注册:

self.searchBar.delegate = self;
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.collectionAddedMembers.dataSource = self;
self.collectionAddedMembers.delegate = self;
[self.collectionAddedMembers registerClass:AddedMemberCollectionViewCell.class forCellWithReuseIdentifier:cellReuseIdentifierAdded];

【问题讨论】:

“它不添加新单元格”是什么意思?此外,请向我们展示您如何在集合视图中注册您的 AddedMemberCollectionViewCell 这意味着当我调用[self.collectionAddedMembers reloadData]; 时,它不会将单元格添加到视图中。请查看我的编辑。 为什么投反对票?请告诉我下次学习。 【参考方案1】:

您确定该单元格实际上并未添加到您的集合视图中吗?

但是,您做得不对,因为调用 dequeueReusableCellWithReuseIdentifier 不会创建 UICollectionViewCell 而是重新使用现有单元格,因此您在 init 中的初始化代码将永远没有机会被调用。

一个好的方法应该是这样的:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    CustomCell *cell = (CustomCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    NSDictionary *cellData = [data objectAtIndex:indexPath.row];

    // Call custom cell's configure function to init cell content
    [cell configure:cellData];
    return cell;


@interface CustomCell : UICollectionViewCell
-(void)configure:(NSDictionary *)data;
@end

@implementation CustomCell

-(void)configure:(NSDictionary *)data 
    // Init your cell content


@end

【讨论】:

NSLogs 显示 Elements in array: 1 | Cells: 0 调用 self.collectionAddedMembers.visibleCells.count。我以相同的结果实施了您的方法。可能正在添加单元格,但它们不可见。

以上是关于UICollectionView - 不要添加新的自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式在 UITableViewCell 中创建一个 UICollectionView

将每个字母定位到每个答案容器,但不要添加新的答案容器 - 使用 AngularJs 拖放

为 UICollectionView 设置一个新的 collectionViewLayout 给空白屏幕

UICollectionView indexPathsForVisibleItems 不更新新的可见单元格

UICollectionView 和一个视图控制器中的其他视图

UICollectionView scrollToItemAtIndexPath: 并获得新的单元格位置