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;
}
}
これはテーブル全体を再読み込みしていますか?私は数千のレコードを持つ結果のコントローラを取得しました。これはそれを殺すかもしれないようです... –
'[self.mainTableView reloadRowsAtIndexPaths:self.mainTableView.indexPathsForVisibleRows]'を使ってこれを解決しました。 –