在单元格中下载进度
我想在UITableViewCell
里面开发一个进度视图。
在我的第一个实现中,我使用AFHTTPRequestOperation
和它的setDownloadProgressBlock:^
在我的单元格内。
后来我的目标变得更加复杂了。 我有一个UITableView
显示不同的内容(歌曲播放列表)。 同一首歌曲可能会出现在几个播放列表中。 当我开始在一个播放列表中下载歌曲并切换到另一个(其中也包含这首歌曲)时,我想要看到第一个播放列表中的下载进度。
我已经成功地使它工作。 在下载过程开始时,我在全局类中创build了一个进度视图。 为了显示这个单元格的进度视图,我只使用addSubview
removeFromSuperview
。 但我不喜欢这种方式,因为我必须在现有进度视图之上添加进度视图(因为每个单元都有自己的进度视图,因为应用程序devise)。
现在我使用另一种方法。 当我显示单元格时,我将setDownloadProgressBlock:^
设置为现有的进度视图。 我工作正常,但是当我打开另一个播放列表时,进度显示在另一首歌曲上。 我敢打赌,这是因为我使用的可重复使用的细胞。
我有点厌倦了实现这个东西,任何想法如何使其正常工作?
你是对的,由于单元格的重用,连接每个单元和下载进度callback是不正确的。 为了解决这个问题,我将在Song
对象中保存下载状态,当它设置为YES
,开始观察通知。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil];
在AFHTTPRequestOperation
的进度callback模块中,发出一个name:kSongDownloadProgressUpdateNotificaton
和一个歌曲ID标识符。
在progressDidUpdate:
个别单元格中,确定它自己正在更新的进度,如果没有忽略它,如果是的话,更新单元格中的progressView。 下载完成后,删除通知的观察。
此外,由于当UITableView调用cellForRowAtIndexPath
和Song
将随时分配给另一个单元格时,您需要在Song
对象中保存一个下载百分比数据,保存和恢复进度将使下载状态保持不变。