自定义UICollectionViewCell drawRect

时间:2013-09-09 17:20:00

标签: ios objective-c uicollectionviewcell

我自定义UICollectionViewCell,其中包含少量UIImageView subview个。我不知道photoInfo字典参数发送到此单元格之前UIImageView s的数量。所以我创建了

@property (strong, nonatomic) NSDictionary* photoInfo;

-(void) setPhotoInfo:(NSDictionary *)photoInfo{
      ......
}

我在- (void)drawRect:(CGRect)rect

中初始化所有UIImageViews

但我必须知道需要创建多少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。有任何更好的方法来解决这个问题。

1 个答案:

答案 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,这样你就不会看到任何东西,直到你真正将图像放入其中。