下载文件时如何更新UICollectionViewCell子类中的progressBar

Posted

技术标签:

【中文标题】下载文件时如何更新UICollectionViewCell子类中的progressBar【英文标题】:How update progressBar in UICollectionViewCell subclass when download file 【发布时间】:2013-01-26 22:22:58 【问题描述】:

我快疯了,当我下载文件时,我正在尝试更新UICollectionViewCelll 的progressBar,我已经尝试了一切,一切都尝试了,这是我最后一次尝试,我创建了@987654322 的子类@,与xib 文件相连:

#import <UIKit/UIKit.h>

@interface DocumentCell : UICollectionViewCell

@property (weak, nonatomic) IBOutlet UIImageView *documentImage;
@property (weak, nonatomic) IBOutlet UIProgressView *downloadBar;

- (void)downloadDocumentWithUrl:(NSURLRequest *)requestUrl;

@end 

- (void)downloadDocumentWithUrl:(NSURLRequest *)requestUrl

.....
AFDownloadRequestOperation *request = [[AFDownloadRequestOperation alloc] initWithRequest:requestUrl targetPath:zipDownloadPath shouldResume:YES];

[request setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
        NSLog(@"Successfully downloaded file to %@", zipDownloadPath);

  failure:^(AFHTTPRequestOperation *operation, NSError *error) 
        NSLog(@"Error: %@", error);

    ];

[request setProgressiveDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpected, long long totalBytesReadForFile, long long totalBytesExpectedToReadForFile) 

        NSLog(@"%f",totalBytesReadForFile/(float)totalBytesExpectedToReadForFile);
        [self performSelectorOnMainThread:@selector(updateBar:) withObject:[NSNumber numberWithFloat:(totalBytesReadForFile/(float)totalBytesExpectedToReadForFile)] waitUntilDone:YES];
    ];

    [downloadQueue addOperation:request];


- (void)updateBar:(NSNumber *)floatNumber

    [self.downloadBar setProgress:[floatNumber floatValue]];

NSLog setProgressiveDownloadProgressBlock 完美运行,我可以看到我下载的所有字节,但progressBar 不会自行更新,始终保持为零...我不明白怎么做...这就是我的方式显示单元格,调用方法下载:

- (void)startDownload:(NSString *)downloadUrl

    //DocumentCell *cell = (DocumentCell *)[self.collectionView cellForItemAtIndexPath:self.downloadPath]; i have tried also in this way
     DocumentCell *cell = (DocumentCell *)[self.collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:self.downloadPath];

[cell downloadDocumentWithUrl:requestUrl];


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    UINib *cellNib = [UINib nibWithNibName:@"DocumentCell" bundle:nil];
    [self.collectionView registerNib:cellNib forCellWithReuseIdentifier:CellIdentifier];
    ...


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

    DocumentCell *cell = (DocumentCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
 cell.documentImage.....etc

return cell;

有人可以帮助我吗?调用下载文件的方法,下载的字节的nslog有效,进度条不...请帮我更新这个进度条...

【问题讨论】:

t 值它返回 totalBytesReadForFile/(float)totalBytesExpectedToReadForFile) 【参考方案1】:

试试这个:

[self performSelectorOnMainThread:@selector(updateBar:) withObject:[NSNumber numberWithFloat:((float)totalBytesReadForFile/(float)totalBytesExpectedToReadForFile)] waitUntilDone:YES];

【讨论】:

【参考方案2】:

这是我第一次使用 UIProgressView。尝试设置 UIProgressView 框架时遇到同样的问题。但是当initWithProgressViewStyle,就OK了。请再次检查我的代码: https://github.com/lequysang/TestCollectionViewWithProgressBar

【讨论】:

非常感谢您的回答!我认为问题出在我的 xib 文件上,因为没有输入带有 xib 文件的 - (id)initWithFrame:(CGRect)frame 方法......相反,如果我使用情节提要所有工作!也许是因为它更好地连接在一起!非常感谢您向我展示示例! @Piero 我有同样的问题,相同的代码,但它不能在所有操作块中以不同的值同时更新所有进度标准:(我认为它是“Cose”单元格出队” @Omarj 在聊天室找到我chat.***.com/rooms/26420/ios-tutorials

以上是关于下载文件时如何更新UICollectionViewCell子类中的progressBar的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 UICollectionView 的部分以编程方式更新标签

Swift UICollectionView 在单击时更新单元格标签而不是实时更新

设置单元格数据后如何更新 UICollectionView 中单元格的大小?

NSOperationQueue mainQueue 不更新 UICollectionViewCell

UICollectionView:更新Section FooterTitles

UICollectionView:更新节页脚标题