我的应用程序有一个collectionView,其collectionViewCells占据了整个屏幕。每个collectionViewCell都有一个背景视图和多个"注释" (观点)就此而言。我在collectionViewCell子类的方法中动态创建这些注释视图,因为每个单元格都有可能不同数量的注释。
在collectionViewCell子类中,我正在做
[self.contentView addSubview:annotationView];
为每个注释视图。
我的问题是,当注释出列并准备重用时,注释不会从单元格中删除,因此我最终会对多个单元格显示不正确的注释。
我知道我可以做类似
的事情[[[cell contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
这是删除动态创建的子视图的最佳方法,还是有更好的方法?
答案 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