Анимируйте табличное представление executeFetch как пропущенные вызовы в приложении телефона iPhone - PullRequest
0 голосов
/ 06 января 2011

У меня есть UISegmentedController, который управляет TableView. когда selectedIndex переключен, я предварительно формирую метод executeFetch с новым предикатом, который вызывает изменение в содержимом tableView.

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

ценю любую помощь.

1 Ответ

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

ОК удалось это сделать -

Я не знаю, как это делает яблоко, но я отошел, когда понял, что формирование новой выборки является более дорогой операцией, чем шаг

1: в моем случае я добавил mutableArray, который собирает все индексы ячеек, которые я хочу исчезнуть, когда пользователь нажимает на сегментированный контроллер.

в функции CellForRaw я вставил этот маленький код:

- (void)configureCell:(PersonCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    // Configure the cell
    if([fetchedResultsController objectAtIndexPath:indexPath]!=nil){
    Person *person = (Person *)[fetchedResultsController objectAtIndexPath:indexPath];
    cell.person = person;
    cell.delegate=self;

        if (person.state!=0) {
            [activeIndexPaths addObject:indexPath];
        }
    }
}

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

шаг 2: следующая функция вызывается при внесении изменений в segmentedController -

-(void)ReloadTableViewWithNewPerdicate:(id)sender{

    UISegmentedControl *sc = (UISegmentedControl*)sender;
    //[theTableView beginUpdates];
    Person *person;
    switch (sc.selectedSegmentIndex) {
        case 1:
            for (int i=0; i<[activeIndexPaths count]; i++) {
                person=(Person*)[fetchedResultsController objectAtIndexPath:[activeIndexPaths objectAtIndex:i]];
                [fetchedResultsController.managedObjectContext deleteObject:person];
            }

            //[theTableView insertRowsAtIndexPaths:activeIndexPaths withRowAnimation:UITableViewRowAnimationRight];
            break;
        case 0:
            [fetchedResultsController.managedObjectContext rollback];
            break;

    }

Эта функция удаляет необработанные строки из fetchedResultsController.managedObjectContext и:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller{
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
}
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
}
*Функции 1021 * отвечают за удаление ненужных необработанных строк.и это в основном то, как вы получаете эффект удаления.

шаг 3: когда пользователь нажимает на главную кнопку segmentedController, функция вызывает:

            [fetchedResultsController.managedObjectContext rollback];

, чтобуквально откатывает все назад.

шаг 4: Последний важный шаг - добавить функцию rollBack в ViewWillDisAppear, чтобы убедиться, что функция сохранения в делегате приложения не сохранит изменения и удалит изменения.сырье из магазина.

надеюсь, это кому-нибудь поможет.

добрый день.

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