UITableView - как я могу перейти прямо от одного вида элемента к другому? - PullRequest
1 голос
/ 19 мая 2011

Часть моего приложения - это раздел заметок, немного похожий на встроенное в iPhone приложение заметок.Пользователь нажимает на свою заметку в UITableView (контролируемом NSFetchedResultsController), а UINavigationController показывает заметку.

В настоящий момент, если пользователь хочет просмотреть другую заметку, он должен вернуться к UITableView и выбратьэто там.Я хотел бы иметь стрелки вверх и вниз, чтобы перейти прямо к следующей / предыдущей заметке.

Как лучше всего это сделать?Я предполагаю, что мне нужно вернуться и как-то получить следующий элемент из NSFetchedResultsController, не показывая UITableView?И как мне интегрировать это с UINavigationController?

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Оказалось, что ответ был действительно прост - мне не нужно было менять взгляды вообще. Я только что получил новую информацию от корневого контроллера представления с помощью делегата и изменил все свойства текущего контроллера представления. Одним из этих свойств является NSIndexPath, поэтому он знает, где он находится в таблице корневого представления.

0 голосов
/ 19 мая 2011

Я придумал довольно грязное решение. Это просто работает, но я уверен, что должно быть что-то гораздо более элегантное и простое. В любом случае, вот что у меня сейчас работает.

Во-первых, 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];
}

Это работает, но это довольно не элегантно, и всегда приводит к «всплывающей» анимации (справа налево), идет ли речь о следующей ноте или предыдущей. Я тоже обдумал это с помощью некоторой основной анимации, но я уверен, что мне не хватает гораздо более простого и лучшего способа сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...