我自定义UICollectionViewCell
,其中包含少量UIImageView
subview
个。我不知道photoInfo字典参数发送到此单元格之前UIImageView
s的数量。所以我创建了
@property (strong, nonatomic) NSDictionary* photoInfo;
-(void) setPhotoInfo:(NSDictionary *)photoInfo{
......
}
我在- (void)drawRect:(CGRect)rect
但我必须知道需要创建多少UIImageView
。
- (void)drawRect:(CGRect)rect
{
NSArray *photos = [self.photoInfo objectForKey:@"photos"];
if (photos && photos.count) {
int i = 0;
for (NSDictionary *photoInfo in photos) {
//create UIImageView here
UIImageView *imgView = [[UIImageView alloc] init];
[self.contentView addSubView:imgView];
}
}
}
问题是当调用drawRect
时,尚未调用setPhotoInfo:(NSDictionary *)photoInfo,因此我无法获得self.photoInfo,因此没有创建UIImageView
。有任何更好的方法来解决这个问题。
答案 0 :(得分:0)
我不会在drawRect中这样做。如果您只是将您的setter更改为如下所示:
-(void) setPhotoInfo:(NSDictionary *)photoInfo
{
if(_photoInfo != photoInfo)
{
_photoInfo = photoInfo;
[self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
NSArray *photos = _photoInfo[@"photos"];
for (NSDictionary *photoInfo in photos) {
//create UIImageView here
UIImageView *imgView = [[UIImageView alloc] init];
[self.contentView addSubView:imgView];
}
}
}
然后,当您更新字典时,它将清除所有子视图并将其添加到内容视图中。将新图层添加到内容视图时,它将自动重绘。当然,你在样本中创建空的UIImageViews,这样你就不会看到任何东西,直到你真正将图像放入其中。