Я придумал довольно грязное решение. Это просто работает, но я уверен, что должно быть что-то гораздо более элегантное и простое. В любом случае, вот что у меня сейчас работает.
Во-первых, UITableView является делегатом UIViewController заметки. UIViewController заметки имеет свойство с именем "editIndexPath", которое является indexPath этой заметки в UITableView. Когда пользователь нажимает кнопку «предыдущая заметка», вызывается следующий метод:
- (void)backAction:(id)sender
{
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:editingIndexPath.row-1 inSection:editingIndexPath.section];
[self.delegate editingViewControllerDidRequestObjectAtIndexPath:newIndexPath];
}
Затем метод делегата в tableViewController:
- (void)editingViewControllerDidRequestObjectAtIndexPath:(NSIndexPath *)indexPath
{
[self.navigationController popViewControllerAnimated:NO];
NoteEditViewController *detailViewController = [[NoteEditViewController alloc] init];
[self.navigationController pushViewController:detailViewController animated:animated];
Note *aNote = [self.fetchedResultsController objectAtIndexPath:indexPath];
detailViewController.noteTextView.text = aNote.text;
detailViewController.editingIndexPath = indexPath;
detailViewController.delegate = self;
[detailViewController release];
}
Это работает, но это довольно не элегантно, и всегда приводит к «всплывающей» анимации (справа налево), идет ли речь о следующей ноте или предыдущей. Я тоже обдумал это с помощью некоторой основной анимации, но я уверен, что мне не хватает гораздо более простого и лучшего способа сделать это.