2012-01-30 3 views
0

У меня возникла небольшая проблема с навигационными контроллерами. Я настроил контроллер навигации с 2 «ветвями». Как и aviewController1> aViewController2> aviewController3, а другая ветвь - biewController1> bviewController2. Теперь мне хотелось бы иметь возможность перейти от текущей позиции к нижней (первый вид) другой ветви (например, aviewController3> bviewController1 и т. Д.). Очевидно, что простой [self.navigationController addSubview:someview.view] не будет выполнять задание, так как он приведет меня только к этому виду и сохранит текущий стек стека контроллера. Могу ли я получить некоторые идеи о том, как это сделать?Прыжки между разными слоями в UINavigationController

ответ

2

popto Root Вы можете хлопнуть несколько стеков просто вызывая поп несколько раз. Если вы сделаете все popViewController: анимированные: вызовы с анимированным набором в НЕТ, он должен быть плавным.

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

+0

Я попытался позвонить [self.navigationController popViewControllerAnimated: NO]; несколько раз друг за другом, но только первый стек get's poped. Так вы правильно это понимаете? –

+0

Вы вызываете это из одного из контроллеров? Если это не будет работать более одного раза, поскольку после того, как вы вытащили контроллер вида, с которого вы сейчас звоните, self.navigationController будет равен нулю, потому что этот viewController больше не находится в стеке навигации. Вам нужно получить ссылку на navigationController и сохранить его в переменной, после чего вы можете поместить его несколько раз. например UINavigationController * controller = self.navigationController; [контроллер popViewControllerAnimated: NO]; [контроллер popViewControllerAnimated: NO]; и т.д... –

1

Поскольку контроллер навигации в основном представляет собой стек, безопасный способ сделать это - просто поп-а3, поп-а2, поп-а1, а затем нажать b1.

если ветвь корневой контроллер, то вы можете ускорить его, делая контроллер

+0

Глупый вопрос, но как я могу поместить несколько стеков одновременно? –

+0

Если вы не дойдете до корневого контроллера, я бы просто выложил их по одному за раз. –

+0

Мне не нужно будет спускаться к корневому контроллеру, чтобы это работало. Но почему-то, когда я вызываю pop несколько раз, кажется, что только pop 1 stack. Я называю это нажатием кнопки UIActionSheet, может ли это вызвать проблемы? –

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