我有一個由fetchedResultsController支持的表視圖。在我的表格單元格中,我有一個執行軟刪除的按鈕,就視圖而言...點擊按鈕,執行軟刪除的選擇器被調用,並且...應該發生某事(I'我嘗試了很多東西),但沒有嘗試過像Apple的行動畫那樣的動畫。核心數據/ UITableView上的動畫數據刷新(軟刪除)
我可以執行簡單的行動畫,就像使其滑動一樣(在我告訴表重新加載之後會留下一個空行),這反過來又有點刺耳的效果)。這是我來最接近:
-(void) completeTask: (id) sender { NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]]; NSDate *date = [[NSDate alloc] init]; NSManagedObject *task = [self.fetchedResultsController objectAtIndexPath:indexPath]; [task setValue:date forKey:@"complete"]; AppController *ac = [AppController sharedAppController]; NSManagedObjectContext *moc = [ac managedObjectContext]; NSError *error = nil; if(![moc save:&error]){ NSLog(@"%@ %@",error, [error description]); exit(-1); } else { UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; CGRect cellFrame = cell.frame; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.35]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(someAnimationDidStop:finished:context:)]; cell.frame = CGRectMake(cellFrame.size.width , cellFrame.origin.y, cellFrame.size.width, cellFrame.size.height); [UIView commitAnimations]; } } -(void) someAnimationDidStop:(NSString *)animationID finished:(BOOL)finished context:(void *)duration { NSLog(@"Animation Stopped"); [self fetchResults]; // this guy performs a new fetch and table data reload }
我覺得我在正確的軌道上是有點,但我不認爲這真的是相當的答案。我希望以某種方式controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
將是答案。我的猜測是,如果我需要股票Apple動畫,我將不得不創建一個單獨的NSMutableArray來跟蹤結果,並確保它保持同步。
思想和觀點?
謝謝!
你是對的 - 在對我的委託方法進行一些更改以正確啓用真正的刪除後,看起來我的答案在下面停止工作,直到我刪除了手動表管理。謝謝! – Cameron 2011-05-09 19:38:05