Прогресс загрузки в ячейку

Я пытаюсь развить взгляд на прогресс внутри UITableViewCell,

В моей первой реализации я использовал AFHTTPRequestOperation И его setDownloadProgressBlock:^ в моей камере

Позже моя цель стала более сложной. у меня есть такой UITableView который отображает различное содержание (списки воспроизведения песни). Одна и та же песня может выходить в нескольких плейлистах. Когда я начинаю скачивать песню в одном списке воспроизведения и переключаюсь на другой (который также содержит эту песню), я хочу видеть процесс загрузки, как в первом списке воспроизведения.

Мне удалось заставить это работать. В начале процесса загрузки я создаю представление прогресса в глобальном классе. Чтобы показать этот прогресс вид на ячейку, я просто использую addSubviewremoveFromSuperview, Но мне не нравится этот способ, потому что я должен добавить представление прогресса поверх существующего представления прогресса (потому что каждая ячейка имеет свое собственное представление прогресса из-за дизайна приложения).

Теперь я использую другой подход. Когда я показываю ячейку, которую я установил setDownloadProgressBlock:^ к существующему представлению прогресса. Я хорошо работаю, но когда я открываю другой плейлист, прогресс отображается на другой песне. Бьюсь об заклад, это из-за многоразовых ячеек, которые я использую.

Я немного устал от реализации этой вещи, есть идеи, как заставить ее работать должным образом?

1 ответ

Решение

Вы правы, из-за повторного использования ячейки неправильно связывать каждую отдельную ячейку с обратным вызовом процесса загрузки. Чтобы решить эту проблему, я сохраню состояние загрузки в вашем Song объект, когда он установлен в YES, начните наблюдать за уведомлением.

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

в блоке обратного вызова AFHTTPRequestOperation, отправить name:kSongDownloadProgressUpdateNotificaton с идентификатором идентификатора песни.

в progressDidUpdate: для отдельной ячейки, определите, что она обновляет прогресс на себе, если не игнорируйте его, если да, обновите progressView в ячейке. Когда загрузка закончится, удалите наблюдение для уведомления.

Кроме того, вам нужно сохранить данные о проценте загрузки в Song объект с тех пор, когда UITableView вызывает cellForRowAtIndexPath а также Song будет назначен другой ячейке в любой момент, при сохранении и восстановлении состояние загрузки будет постоянным.

Другие вопросы по тегам