Изменить свойство при ленивой загрузке таблицы?

Контекст: у меня есть таблица с пользовательскими ячейками. В каждой ячейке есть кнопка для загрузки ресурса. При нажатии кнопки все остальные кнопки в виде таблицы должны быть отключены.

Поэтому моя проблема в том, что я не могу получить ссылку на все строки в табличном представлении, так как это ленивая загрузка. Поэтому, когда я пытаюсь получить доступ к другим строкам, происходит сбой, потому что у него нет объекта для добавления в тот момент, когда я начинаю отключать кнопки.

Вот код, который может быть более полезным для моей проблемы:

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, добавить ваши поля к этому объекту (т.е. вашу кнопку), сохранить список всех этих объектов, а затем позволить ленивому рендерингу обрабатывать фактический рендеринг. Если вы хотите отключить все кнопки, вы не заглядываете в визуализированные ячейки, вы просто перебираете список объектов, отключая кнопки в каждой из них.

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