ProgressView未在所有UICollectionViewCells中显示

时间:2014-04-28 23:51:06

标签: ios progress-bar uicollectionviewcell

我的问题是ProgressView只显示在前2个单元格中。我的代码出了什么问题?

注意:我的CollectionView水平滚动,每个单元格覆盖整个屏幕。我认为这可能有一些事情要做,因为我尝试在同一视图中显示所有单元格并且它们工作正常。所有ProgressView都会显示。

已编辑代码:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {

static NSString *cellIdentifier = @"Cell";
VestimentaDetailCell *cell = (VestimentaDetailCell *) [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

cell.progressView.hidden = NO;
[cell.progressView setProgress:0.02];

PFFile *storeLooks = [self.vestimenta objectForKey:[NSString stringWithFormat:@"image_%ld", (long)indexPath.item]];

NSMutableString *precio = [NSMutableString string];
for (NSString* precios in [self.vestimenta objectForKey:[NSString stringWithFormat:@"precios_%ld", (long)indexPath.item]]) {
[precio appendFormat:@"%@\n", precios];}

[storeLooks getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error && data.length > 0) {

cell.imageFile.image = [UIImage imageWithData:data];

} else {

    cell.progressView.hidden = YES;

        }

} progressBlock:^(int percentDone) {
    float percent = percentDone * 0.02;
    [cell.progressView setProgress:percent];
    if (percentDone == 100){
        cell.progressView.hidden = YES;
    } else {
    cell.progressView.hidden = NO;
 }

}];

return cell;
}

2 个答案:

答案 0 :(得分:1)

您应该只是setHidden:YES

,而不是从单元格中删除进度视图

这样,当重复使用单元格时,将显示进度视图,然后当您想要开始在该单元格中加载内容时,可以setHidden:NO

重复使用单元格内的进度块时也要小心。请记住,如果单元格被重用,则取消加载操作,或者确保进度块仅在单元格未被重用于其他数据项时才继续更新它的单元格。


例如,我将进度设置为0.,您将在其中显示进度视图:

VestimentaDetailCell *cell = (VestimentaDetailCell *) [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

cell.progressView.hidden = NO;
[cell.progressView setProgress:0.];

因为你在数据加载完成后隐藏了progressView,我只想在progressBlock中删除这段代码:

  if (percentDone == 100){
    cell.progressView.hidden = YES;
  } else {
    cell.progressView.hidden = NO;
  }

答案 1 :(得分:0)

我认为这与细胞在屏幕上重复使用有关。由于要从单元格[cell.progressView removeFromSuperview]中删除progressView,一旦它出列,它仍然会丢失。您可以尝试覆盖VestimentaDetailCell类中的prepareForReuse方法,将其添加回来,以便将所有出列的单元格恢复到原始状态。