Как использовать базовые данные и правильно отображать анимацию при переключении между режимами редактирования при использовании дополнительной строки для вставки новой записи? - PullRequest
0 голосов
/ 05 марта 2011

Я пытаюсь использовать дополнительную строку в нижней части моего UITableView, которая будет использоваться для вставки записи. Это работает нормально, но у меня возникают проблемы с его анимацией. Либо дополнительная строка отображается правильно, и я не получаю анимацию (используя [self.tableView reloadData] в методе setEditing:. Или я получаю анимацию и не получаю лишнюю строку, не используя reloadData. Я знаю, что, вероятно, я не показываю правильная дополнительная строка (возвращая еще одну строку в моем методе numberOfRowsInSection и используя reloadData для принудительного обновления.).

Я знаю, что должен быть правильный способ сделать это, но я не видел примеров.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {


    [super setEditing:editing animated:animated];

    [self.tableView setEditing:editing animated:animated];


}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    if (self.editing == YES) {
        return [sectionInfo numberOfObjects] + 1;    
    }
    return [sectionInfo numberOfObjects];

}


- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row + 1 > [fetchedResultsController.fetchedObjects count]) {
        cell.textLabel.text = @"Add New Row...";
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    } else {

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        MyManagedObject *aManagedObject = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.row];
        cell.textLabel.text = aManagedObject.planName;
    }
}

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

Используйте insertRowsAtIndexPaths:withRowAnimation:, чтобы сообщить табличному представлению, что вы "вставили" строку в нужное место, когда начинается редактирование, и deleteRowsAtIndexPaths:withRowAnimation:, чтобы сообщить табличному представлению, что вы "удалили" строку, когда редактирование завершено.

0 голосов
/ 06 марта 2011

Это тот тип пользовательского интерфейса, для которого вы действительно должны использовать tableFooterView. Это помещает настраиваемое представление внизу таблицы, но оно не влияет на количество строк самой таблицы. Если вы вставляете и фактическую строку, которая не отражена в данных, вам необходимо управлять всеми функциями, относящимися к счетчику строк, потому что строки в данных больше не синхронизируются со строками в табличном представлении.

...