AQGridView中的进度条(类似于TableView)

时间:2011-12-25 19:38:47

标签: ios

我有一个奇怪的问题。我正在使用一个AQGridView,它有一个类似于表视图控制器的方法,我已经定义如下:

- (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index
{
    static NSString *CellIdentifier = @"IssueCell";

    AQGridViewCell *cell = (AQGridViewCell *)[gridView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"IssueCell" owner:self options:nil];

        cell = [[AQGridViewCell alloc] initWithFrame:self.gridViewCellContent.frame
                                      reuseIdentifier:CellIdentifier];
        [cell.contentView addSubview:self.gridViewCellContent];

        cell.selectionStyle = AQGridViewCellSelectionStyleNone;
    }

    IssueCell *content = (IssueCell *)[cell.contentView viewWithTag:1];

    //This model object contains the title, picture, and date information
    IssueModel *m = (IssueModel *)[self.issues objectAtIndex:index];

    //If we have already downloaded the file, set the alpha to 1
    if ([m hasPdfBeenDownloaded])
    {
        content.downloadIcon.hidden = YES;
        content.imageView.alpha = 1;
        content.progressView.hidden = YES;
    }
    else
    {
        if (m.pdfDownloadRequest && m.pdfDownloadRequest.isExecuting)
        {
            content.downloadIcon.hidden = YES;
            content.imageView.alpha = .2;    
            content.progressView.hidden = NO;
        }
        else
        {
            content.downloadIcon.hidden = NO;
            content.imageView.alpha = .2;    
            content.progressView.hidden = YES;            
        }
    }

    content.title.text = m.title;
    // Only load cached images; defer new downloads until scrolling ends
    if (!m.coverImageIcon)
    {
        if (self.gridView.dragging == NO && self.gridView.decelerating == NO)
        {
            [self startIconDownload:m forIndex:index];
        }

        content.imageView.image = [UIImage imageNamed:@"grid_cell_loading.png"];                

    }
    else
    {
        content.imageView.image = m.coverImageIcon;
    }
    return cell;
}

IssueCell

我的问题是因为细胞被重复使用,我失去了正确的进度指示并更新了它。我使用ASIHTTP如下:

        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:model.issuePdfUrl];
        request.userInfo = [NSDictionary dictionaryWithObjectsAndKeys:ic, @"cell", model, @"model", nil];
        model.pdfDownloadRequest = request;
        [request setShouldContinueWhenAppEntersBackground:YES];
        [request setDelegate:self];
        [request setDownloadDestinationPath:mediaPath];
        [request setDownloadProgressDelegate:ic.progressView];
        [request startAsynchronous];

我遇到的问题是当我向下滚动然后滚动备份时,我失去了以前用过的可重复使用的进度视图。

这样做的正确方法是什么,所以我不会丢失进度视图?

1 个答案:

答案 0 :(得分:1)

据我所知,你将progressView绑定到一个单元格(例如,第一个单元格),然后滚动到第二个单元格,它正在创建。然后第三个。第三个可能重用第一个单元格。但是没有重新创建progressBar,你重复使用它。

所以你有一个progressBar,但有两个指向它的ASIHTTPRequests。那不太好。

我能建议什么?好。您可以在gridView:cellForItemAtIndex:call期间使用progressBar更新downloadProgressDelegate的链接。这是更好的路径。您还可以删除单元格的可重用性。这可能有所帮助,但不太可行,并且可能在将来导致问题(例如内存泄漏)。

另一种方法是制作一些获取所有进度消息的方法。并使用这些消息将进度数据映射到网格模型。