2009-09-06 1 views
1

может кто-нибудь помочь мне со следующим вопросом. Я работаю над приложением с навигацией, похожей на приложение Notes. Проблема, с которой я столкнулся, как реализовать навигацию на одном уровне и сохранить корневой вид в качестве предыдущего экрана. Итак, сценарий, который мне нужно достичь: 1. Перейдите от верхнего уровня к подробному виду. 2. Из этого подробного представления перейдите к подробному представлению о следующем/предыдущем элементе. 3. Кнопка «Назад» должна вести к корневому представлению.UINavigationController и переключатель next-prev на одном уровне

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

Не могли бы вы указать мне, как лучше организовать взаимодействие контроллеров в этом случае?

Заранее спасибо. Извините за довольно большой пост, старался быть настолько информативным, насколько это возможно.

С наилучшими пожеланиями, Роман

ответ

1

Я думаю, что лучше реализация так:

Скажем, у вас есть класс Note, где хранятся данные.

У вас может быть два контроллера вида, один со списком заметок и один с деталями. Оба они могут быть добавлены в контроллер навигации. Затем, когда вы хотите переключиться на следующую заметку, вы каким-то образом извлекли этот объект и назначили его контроллеру подробностей с помощью вызова -setNote: call. Этот метод будет отвечать за изменение отображаемых точек.

+0

Спасибо за ответ! Я рассмотрел этот путь, но я не уверен, что можно добавить анимацию, чтобы имитировать навигацию на другое представление? – user169259

+0

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

1

Да, это плохо работает. Ответ Джонсмы - лучший. В случае, если вы хотите, чтобы заново создать контроллеры, я нашел эту работу:

[parent performSelectorOnMainThread:@selector(showMyItem:) 
         withObject:myNextItem 
         waitUntilDone:NO]; 
[self.navigationController popViewControllerAnimated:NO]; 

performSelectorOnMainThread задерживает выполнение метода до следующего запуска основного цикла, а затем предыдущий контроллер уже удален и навигационный контроллер находится в стабильном состоянии.

1

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

Смежные вопросы