Прогресс загрузки в ячейку
Я пытаюсь развить взгляд на прогресс внутри UITableViewCell
,
В моей первой реализации я использовал AFHTTPRequestOperation
И его setDownloadProgressBlock:^
в моей камере
Позже моя цель стала более сложной. у меня есть такой UITableView
который отображает различное содержание (списки воспроизведения песни). Одна и та же песня может выходить в нескольких плейлистах. Когда я начинаю скачивать песню в одном списке воспроизведения и переключаюсь на другой (который также содержит эту песню), я хочу видеть процесс загрузки, как в первом списке воспроизведения.
Мне удалось заставить это работать. В начале процесса загрузки я создаю представление прогресса в глобальном классе. Чтобы показать этот прогресс вид на ячейку, я просто использую addSubview
removeFromSuperview
, Но мне не нравится этот способ, потому что я должен добавить представление прогресса поверх существующего представления прогресса (потому что каждая ячейка имеет свое собственное представление прогресса из-за дизайна приложения).
Теперь я использую другой подход. Когда я показываю ячейку, которую я установил setDownloadProgressBlock:^
к существующему представлению прогресса. Я хорошо работаю, но когда я открываю другой плейлист, прогресс отображается на другой песне. Бьюсь об заклад, это из-за многоразовых ячеек, которые я использую.
Я немного устал от реализации этой вещи, есть идеи, как заставить ее работать должным образом?
1 ответ
Вы правы, из-за повторного использования ячейки неправильно связывать каждую отдельную ячейку с обратным вызовом процесса загрузки. Чтобы решить эту проблему, я сохраню состояние загрузки в вашем Song
объект, когда он установлен в YES
, начните наблюдать за уведомлением.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil];
в блоке обратного вызова AFHTTPRequestOperation
, отправить name:kSongDownloadProgressUpdateNotificaton
с идентификатором идентификатора песни.
в progressDidUpdate:
для отдельной ячейки, определите, что она обновляет прогресс на себе, если не игнорируйте его, если да, обновите progressView в ячейке. Когда загрузка закончится, удалите наблюдение для уведомления.
Кроме того, вам нужно сохранить данные о проценте загрузки в Song
объект с тех пор, когда UITableView вызывает cellForRowAtIndexPath
а также Song
будет назначен другой ячейке в любой момент, при сохранении и восстановлении состояние загрузки будет постоянным.