UITableViewCell кэширует свое свойство backgroundView - PullRequest
1 голос
/ 20 января 2011

У меня есть UITableView, который использует ячейки с пользовательскими backgroundViews.Я назначаю backgroundViews в tableView:cellForRowAtIndexPath:indexPath: как предложено здесь .В двух словах, в зависимости от положения UITableViewCell в его UITableView, я хочу назначить определенные изображения backgroundView.Вот код, о котором идет речь:

UIImage *rowBackground = nil;

if (row == 0 && row == sectionRows - 1) {
    rowBackground = [UIImage imageNamed:@"row_bg_start_and_end.png"];
} else if (row == 0) {
    rowBackground = [UIImage imageNamed:@"row_bg_start.png"];
} else if (row == sectionRows - 1) {
    rowBackground = [UIImage imageNamed:@"row_bg_end.png"];
} else {
    rowBackground = [UIImage imageNamed:@"row_bg.png"];
}

((UIImageView *)cell.backgroundView).image = rowBackground;

Это прекрасно работает, и я вижу ожидаемые результаты.У меня, однако, есть проблемы, когда речь идет об удалении или добавлении строк, что неизменно означает, что определенные строки сохраняют свои прежние backgroundViews, а не пересчитывает их размещение и обновляет рассматриваемое представление.

Я понимаю цельdequeueReusableCellWithIdentifier и почему это происходит.Но я не уверен, как исправить это правильно .Я могу сказать, что строки правильно пересчитываются при вызове tableView:cellForRowAtIndexPath:indexPath:, прокручивая их за пределами экрана, что приводит к корректному сбросу их backgroundView.

Должен ли я также задавать свойство backgroundView в willDisplayCell:forRowAtIndexPath:?Как мне справиться с этой ситуацией?

1 Ответ

0 голосов
/ 23 января 2011

Самый простой подход к решению проблемы - это повторная обработка фоновых изображений всех видимых строк при добавлении новых строк в раздел.

т.е.

for (UITableViewCell *cell in aTableView.visibleCells)
{
    NSIndexPath *cellIndexPath = [aTableView indexPathForCell:cell];

    /* look at the cell.backgroundImage and if it's not appropriate
    for the indexPath, update it */
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...