2011-02-04 12 views
0

NSFetchedResultsControllerから更新されるUITableViewがあります。 UITableViewには、偶数行と奇数行の交互の行色があります。私はオブジェクトの挿入と削除のサポートを追加する必要があるので、これを処理するためにNSFetchedResultsControllerDelegateを実装しました。しかし、今ではどこにでも挿入した後に交互に色分けします。どのようにテーブルビューをリロードせずに(私のアニメーションを緩くしないで)これを解決するためのアイデア?ここで NSFetchedResultsControllerDelgateと交互に表示される表ビューのセル

は、これまでの私のコードです:変更さ

- (void)reloadRowsFromIndex:(NSUInteger)index { 
    NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 
    for (NSInteger i = index; i < [items count]; i++) { 
     [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
    } 
    [tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
    [indexPaths release]; 
} 

reloadRowsFromIndex:が最初のインデックスパスで、tableView:commitEditingStyle:forRowAtIndexPath:内で呼び出されます。

以下
- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomTableViewCell *cell = ...; 
    indexPath.row % 2 == 0 ? [cell odd] : [cell even]; 
    return cell; 
} 

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)object 
     atIndexPath:(NSIndexPath *)deleteIndexPath 
    forChangeType:(NSFetchedResultsChangeType)type 
     newIndexPath:(NSIndexPath *)insertIndexPath 
{ 
    switch(type) 
    { 
    case NSFetchedResultsChangeInsert: 

     [self.mainTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:insertIndexPath] 
        withRowAnimation:UITableViewRowAnimationFade]; 
     break; 
    case NSFetchedResultsChangeDelete: 
     [self.mainTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:deleteIndexPath] 
        withRowAnimation:UITableViewRowAnimationFade]; 
     break; 
    } 
} 

答えて

0

は、私は私のプロジェクトの1のためにやったことあります。

+0

これはテーブル全体を再読み込みしていますか?私は数千のレコードを持つ結果のコントローラを取得しました。これはそれを殺すかもしれないようです... –

+0

'[self.mainTableView reloadRowsAtIndexPaths:self.mainTableView.indexPathsForVisibleRows]'を使ってこれを解決しました。 –

関連する問題