NSFetchedResultsControllerDelegate和交替表视图单元格

时间:2011-02-04 17:52:04

标签: iphone objective-c cocoa-touch xcode

我有UITableView来自NSFetchedResultsController的更新。 UITableView具有偶数行和奇数行的交替行颜色。我需要添加对对象的插入和删除的支持,所以我实现了NSFetchedResultsControllerDelegate来处理这个问题。但是,现在我的交替配色方案是在插入任何地方后插入的。关于如何在不重新加载表视图的情况下解决这个问题的任何想法(而不是放松我的动画)?

到目前为止,这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

以下是我为我的一个项目所做的事情:

- (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:,第一个索引路径被更改。