用于从collectionViewCell中删除未知/动态数量的子视图的模式

时间:2015-05-19 13:55:09

标签: ios cocoa-touch

我的应用程序有一个collectionView,其collectionViewCells占据了整个屏幕。每个collectionViewCell都有一个背景视图和多个"注释" (观点)就此而言。我在collectionViewCell子类的方法中动态创建这些注释视图,因为每个单元格都有可能不同数量的注释。

在collectionViewCell子类中,我正在做

[self.contentView addSubview:annotationView];

为每个注释视图。

我的问题是,当注释出列并准备重用时,注释不会从单元格中删除,因此我最终会对多个单元格显示不正确的注释。

我知道我可以做类似

的事情
[[[cell contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

这是删除动态创建的子视图的最佳方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

由于您的单元格中有其他视图而不是动态视图,因此您需要一些比cell.contentView.subviews更好的方式来访问它们。我建议创建自定义UICollectionViewCell并创建用于处理动态子视图的方法:

@interface CustomCell : UICollectionViewCell

- (void) addDynamicSubview:(UIView*)view;
- (void) removeAllDynamicSubviews;

@end

@implementation CustomCell {
    NSMutableArray* dynamicSubviews;
}

- (void) awakeFromNib {
    dynamicSubviews = [NSMutableArray new];
}

- (void) addDynamicSubview:(UIView*)view {
    [dynamicSubviews addObject:view];
    [self.contentView addSubview:view];
}

- (void) removeAllDynamicSubviews {
    [dynamicSubviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    [dynamicSubviews removeAllObjects];
}

@end