动画表视图performFetch类似于iPhone手机应用程序中的未接来电

时间:2011-01-06 11:08:14

标签: iphone uitableview animation

我有一个控制TableView的UISegmentedController。 当切换selectedIndex时,我正在使用一个新的谓词执行performFetch方法,该谓词会导致tableView内容发生变化。

它工作正常,但是我想让它以与苹果在手机应用程序中所做的相同的风格进行动画制作,当你在所有的时间和只有未接听的电话之间切换时。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

O.K设法做到了 -

我不知道苹果是如何做到这一点的,但是当我意识到预先形成新的获取操作然后更加昂贵时我脱离了 -

第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插入到Array中供以后使用。

第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 {
}

函数负责删除不需要的raws。 这基本上就是你如何得到删除的效果。

第3步: 当用户点击主segmentedController按钮时,函数调用:

            [fetchedResultsController.managedObjectContext rollback];

从字面上推回所有东西。

第4步: 最后一个重要步骤是将rollBack函数添加到ViewWillDisAppear,以确保应用程序委托中的save函数不会保存更改并从商店中删除原始数据。

希望它会帮助别人。

美好的一天。