Можно ли отключить контроллеры вида, управляемые UINavigationController? - PullRequest
0 голосов
/ 27 апреля 2009

Я нарушаю нормальную парадигму UINavigationController, или, по крайней мере, я пытаюсь.

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

Что я хочу сделать, так это иметь кнопку в представлении C, которая покажет другое представление, скажем, X, но при этом сохранит навигационную панель контроллера навигации. По сути, переключите «C» и «X» в стеке. Я попытался сделать это, отключив C и сразу нажав 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];  
}

Ответы [ 3 ]

2 голосов
/ 28 апреля 2009

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

1 голос
/ 28 апреля 2009

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

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

self.navigationItem.hidesBackButton = YES;

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

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

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

1 голос
/ 28 апреля 2009

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

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

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