0

我正在尝试在内部开发进度视图UITableViewCell

在我的第一个认识中,我使用AFHTTPRequestOperation了它,它setDownloadProgressBlock:^在我的牢房内。

后来我的目标变得更加复杂。我有一个UITableView显示不同的内容(歌曲播放列表)。同一首歌曲可能会出现在多个播放列表中。当我开始在一个播放列表中下载歌曲并切换到另一个播放列表(其中也包含这首歌)时,我想查看第一个播放列表中的下载进度。

我已经成功地让它工作了。在下载过程开始时,我在全局类中创建了一个进度视图。为了在我刚刚使用的单元格上显示此进度视图addSubview removeFromSuperview。但我不喜欢这种方式,因为我必须在现有进度视图之上添加进度视图(因为由于应用程序设计,每个单元格都有自己的进度视图)。

现在我使用另一种方法。当我显示单元格时,我设置setDownloadProgressBlock:^为现有的进度视图。我工作正常,但是当我打开另一个播放列表时,进度会显示在另一首歌曲上。我敢打赌,这是因为我使用了可重复使用的电池。

我有点厌倦了实现这个东西,有什么想法可以让它正常工作吗?

4

1 回答 1

1

您是对的,由于单元重用,将每个单独的单元与下载进度回调连接是不合适的。为了解决这个问题,我将在你的Song对象中保存下载状态,当它设置为 时YES,开始观察通知。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil];

在 的进度回调块中AFHTTPRequestOperation,发送name:kSongDownloadProgressUpdateNotificaton带有歌曲 id 标识符的 a。

progressDidUpdate:单个单元格中,确定它正在更新自己的进度,如果没有忽略它,如果是,则更新单元格中的progressView。下载完成后,删除通知的观察。

此外,您需要在Song对象中保存下载百分比数据,因为当 UITableView 调用cellForRowAtIndexPath并将Song随时分配给另一个单元格时,保存和恢复进度将使下载状态保持不变。

于 2013-02-02T06:09:15.760 回答