0

我定制UICollectionViewCell了几个UIImageView subviews。我不知道UIImageViewphotoInfo 字典参数发送到此单元格之前的 s 数。所以我创建了

@property (strong, nonatomic) NSDictionary* photoInfo;

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

我在中初始化所有 UIImageViews- (void)drawRect:(CGRect)rect

UIImageView但我必须知道我需要创建多少个s。

- (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创建。任何更好的方法来解决这个问题。

4

1 回答 1

0

我不会在drawRect中这样做。如果您只是将设置器更改为如下所示:

-(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,因此在您实际将图像放入其中之前您不会看到任何东西。

于 2014-02-23T22:36:46.583 回答