Обновление backgroundView старых / новых верхних / нижних ячеек при вставке / удалении верхних / нижних ячеек - PullRequest
4 голосов
/ 07 сентября 2011

Это код шаблона, указанный в документе NSFetchedResultsControllerDelegate:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView beginUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
    atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {

    switch(type) {
        case NSFetchedResultsChangeInsert:
            [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
                            withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:
            [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
                             withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
    atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
    newIndexPath:(NSIndexPath *)newIndexPath {

    UITableView *tableView = self.tableView;

    switch(type) {

        case NSFetchedResultsChangeInsert:
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                       withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeDelete:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                       withRowAnimation:UITableViewRowAnimationFade];
            break;

        case NSFetchedResultsChangeUpdate:
            [self configureCell:[tableView cellForRowAtIndexPath:indexPath]
                  atIndexPath:indexPath];
            break;

        case NSFetchedResultsChangeMove:
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                       withRowAnimation:UITableViewRowAnimationFade];
            [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                       withRowAnimation:UITableViewRowAnimationFade];
            break;
    }
}


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView endUpdates];
}

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

Однако для ячеек с настраиваемым backgroundView , табличным представлением не выполняются те же переходы фонового представления для нас. Итак, мы увидим такие вещи:

Перед удалением первой строки Before deleting

После удаления первой строки After deleting

Как я могу восстановить красивую анимацию с соответствующими обновлениями вида фона?

1 Ответ

0 голосов
/ 14 февраля 2012

Не существует встроенного простого способа управления анимацией ячеек с настраиваемым фоном ячеек в сгруппированном виде таблицы.

Вы либо ведете список ячеек, фон которых необходимо перерисовать, затем используете [cell.backgroundView setNeedsDisplay]

Или вы можете подумать о маскировке таблицы. Таким образом, у вас есть один фон ячейки, но они обрезаны, смотрите Закругленные углы на UITableView

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