2011-09-07 2 views
4

これはNSFetchedResultsControllerDelegateのドキュメントに与えられたテンプレートコードです:アップデート古い/新しいトップ/ボトムセルのbackgroundView挿入/ボトム/トップセルを削除

- (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]; 
} 

このコードでは、デフォルトのグループ化されたスタイルのテーブルビューの更新そのセルはバックグラウンドビューでうまくアニメーションを変えます。最初のセルを削除すると、2番目のセルが最初の角になり、頂点が正方形から丸く変化します。

ただし、カスタムbackgroundViewのセルの場合、テーブルビューは同じ背景ビュー遷移を行いません。最初の行私は、適切な背景ビューの更新と素敵なアニメーションを復元するにはどうすればよいAfter deleting

を削除した後、最初の行Before deleting

を削除する前に

:だから我々はこのようなものが表示されますか?

+0

あなたは一番上に今ある行をリロードしてみてくださいました(使用した[self.tableViewのreloadRowsAtIndexPathsを<> withRowAnimation:<>])の行を削除した後? – lnafziger

+0

この場合、行をリロードできます。しかし、多くの異なるケースがあります、私はそれらのすべてを扱う一般的な方法が欲しいです。今私は 'NSFetchedResultsControllerDelegate'メソッドで非常に複雑なコードを使用しています。グループ化されたテーブルビューのデフォルトのグループ化されたテーブルビューの素敵なアニメーションを適用するために使用できる魔法のトリガがあるかどうか、より明確な実装 – an0

+0

画像をバックグラウンドビューに使用している場合は、自分自身を見て丸くする必要があります。 – fibnochi

答えて

0

グループ化されたテーブルビュー上にカスタムセル背景を持つセルアニメーションを簡単に管理する方法はありません。

あなたはどちらかの背景その後、[cell.backgroundView setNeedsDisplay]

を使用するか、テーブルビューをマスキング検討することもでき描き直す必要がセルのリストを維持します。だからあなたは1つの細胞の背景を持っているが、それらはクリップされて参照してくださいRound corners on UITableView

+0

また、UITableViewRowAnimationAutomaticがiOS5で使用可能であり、使用しているフェードアニメーションよりも見栄えが良いかもしれないことに言及する価値があります。 – railwayparade

関連する問題