Изменить свойство при ленивой загрузке таблицы?
Контекст: у меня есть таблица с пользовательскими ячейками. В каждой ячейке есть кнопка для загрузки ресурса. При нажатии кнопки все остальные кнопки в виде таблицы должны быть отключены.
Поэтому моя проблема в том, что я не могу получить ссылку на все строки в табличном представлении, так как это ленивая загрузка. Поэтому, когда я пытаюсь получить доступ к другим строкам, происходит сбой, потому что у него нет объекта для добавления в тот момент, когда я начинаю отключать кнопки.
Вот код, который может быть более полезным для моей проблемы:
NSMutableArray *cells = [NSMutableArray array];
for (NSInteger i = 0; i < [mainTableView numberOfRowsInSection:1]; ++i) {
WSVideoLibraryTableCell *addedCell = (WSVideoLibraryTableCell *)[mainTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
NSLog(@"CELL ADDED: %@", addedCell);
[cells addObject:addedCell];
}
if (stateEnabled) {
for (WSVideoLibraryTableCell *cell in cells) {
[[cell downloadButton] setEnabled:YES];
}
}
else
{
for (WSVideoLibraryTableCell *cell in cells) {
[[cell downloadButton] setEnabled:NO];
}
}
Я попытался добавить код, который принимает только видимые ячейки. NSArray *array = [mainTableView visibleCells]
но тогда проблема в том, что в ячейках, которые не были видны, будет включена кнопка, и что-то странное случается со строками, которые, где они видимы, снова и снова появляются в tableView (Что-то связанное с отложенной загрузкой и изменением их?)
Большое спасибо за комментарии и предложения!
2 ответа
Мое предложение состояло бы в том, чтобы у каждого объекта был свой isEnabled
свойство, так что вы можете отключить сами объекты и установить условие для отложенной загрузки, чтобы отключить их в соответствии с этим свойством.
Ленивая загрузка очень полезна, и хотя для тривиального числа ячеек вы не заметите утечку ресурсов, вы будете увеличивать количество обрабатываемых ячеек.
Самый чистый способ сделать это (imo) - это создать подкласс UITableViewCell, добавить ваши поля к этому объекту (т.е. вашу кнопку), сохранить список всех этих объектов, а затем позволить ленивому рендерингу обрабатывать фактический рендеринг. Если вы хотите отключить все кнопки, вы не заглядываете в визуализированные ячейки, вы просто перебираете список объектов, отключая кнопки в каждой из них.