我正在使用拆分视图控制器开发核心数据驱动的iPad应用程序。想象一下iPad Mail应用程序,你就会走上正轨。当我在Root View Controller中选择一条记录时,DetailViewController中会显示详细信息。
在详情视图中,我有一个删除按钮。单击时,它会告知其Core Data上下文删除当前对象。它正确执行删除,并且行应该从RootViewController中消失。
如何让RootViewController在删除的行之后自动选择行,以便随后在详细视图中显示详细信息? (如果删除的行是最后一行,还是自动选择上一行?)
答案 0 :(得分:0)
如果您使用NSFetchedResultsController
来管理表格,那么您可以使用它的委托方法来响应更改。
使用controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
委托方法并检查NSFetchedResultsChangeDelete
更改类型。
您可以查看indexPath
是否与表格中当前选定的行匹配,然后对其采取行动。
答案 1 :(得分:0)
行。我想我明白了。这就是我做的。 (如果你看到更好的方法,请发信息。)
首先,我定义了一个新的NSInteger ivar,lastSelectedRow。
接下来,我改变了
case NSFetchedResultsChangeDelete: { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; break;
到
case NSFetchedResultsChangeDelete: { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; lastSelectedRow = indexPath.row; id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:0]; if (lastSelectedRow == [sectionInfo numberOfObjects]) { --lastSelectedRow; } break; }
然后我改变了
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { [self.tableView endUpdates]; }
到
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { [self.tableView endUpdates]; if (lastSelectedRow > -1) { NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:lastSelectedRow inSection:0]; [self.tableView selectRowAtIndexPath:newIndexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; [self tableView:self.tableView didSelectRowAtIndexPath:newIndexPath]; lastSelectedRow = -1; } }
Und voila !!
作为额外的奖励,我现在可以在我的应用程序终止时存储最后选择的行,并且我可以在下次启动时立即返回它。