2009-04-27 3 views
0

Я нарушаю нормальную парадигму UINavigationController или, по крайней мере, пытаюсь.Можно ли отключить View Controllers, управляемый UINavigationController?

Мы знаем, что контроллер навигации управляет навигацией через стек. Если я инициализирую с помощью корневого контроллера A, перейдите к B, а затем перейдите к C, стек будет выглядеть как C/B/A.

То, что я хочу сделать, есть кнопка на вид C, которая покажет другой вид, скажем X, но все-таки сохранит навигационную панель навигационного контроллера на месте. По сути, переключите «C» и «X» в стек. Я попытался выполнить это, нажав C off и сразу же нажав X, как показано ниже, но это не сработало. Я иду по неверному пути здесь?

-(IBAction)showViewX:(id)sender { 
[[self.parentViewController navigationController] popViewControllerAnimated:NO]; 

XViewController *xViewController = [[XViewController alloc] 
     initWithNibName:@"X" 
     bundle:[NSBundle mainBundle]]; 
[[self.parentViewController navigationController] pushViewController: xViewController animated:YES]; 
[xViewController release]; 
} 

ответ

2

То, что вы называете «просмотр C», на самом деле является «контроллером просмотра C». Поскольку он является контроллером вида, вы можете легко настроить его для переключения между, скажем, двумя представлениями, X и Y. Таким образом, вы просто оставляете C в стеке, не открываете его и не переключаете между представлениями в самом C. Например, вы можете настроить C, чтобы использовать панель инструментов для переключения между представлениями.

+0

хороший, не думаю об этом таким образом. – bpapa

1

Это может быть так, что вы на самом деле не пытается сделать вид навигации, что UINavigationController был разработан для поддержки. В вашем примере, как ваш пользователь возвращается из представления X для просмотра C?

UINavigationController предназначен для базовой навигации вперед/назад. Если у вас есть более сложные потребности в навигации, вам придется создать собственную навигационную систему. Посмотрите, как некоторые из более сложных приложений Apple выполняют свою навигацию (Mail и Safari) - может быть, есть что-то там, что будет полезно?

+0

Чтобы ответить на ваш вопрос, «как ваш пользователь вернется из вида X для просмотра C?», Они не смогут. Вместо этого, когда они перемещаются назад, они отправляются в B вместо C. (В моем случае B имеет кнопки для перехода к C, X и другим представлениям). – bpapa

1

(Глядя на поясняющий комментарий выше, я неправильно понял цель первоначального вопроса, лучшим подходом было бы управлять отображением либо View X, либо View C из самого View C, отключая при необходимости, а не полностью изменяя стек.)

Поскольку вы хотите сохранить панель контроллера навигации, но вы не хотите возвращаться к «C» из «X» (я предполагаю, что есть другой путь из 'X') Тогда вы можете сделать следующее:

self.navigationItem.hidesBackButton = YES; 

изнутри ViewController X, внутри метода viewDidLoad.

X все еще находится в стеке, C все еще находится в стеке, но вы получаете визуальное представление, которое вы хотели.

В противном случае вам, вероятно, понадобится свернуть новый навигационный контроллер, поп X на его стек и перейти к нему, оставив свой старый стек (и ViewController) позади.

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