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