iOS - Как я могу инициализировать UINavigationController для отображения нажатого ViewController? - PullRequest
3 голосов
/ 24 февраля 2012

Мне интересно, как я могу инициализировать UINavigationController для отображения третьего контроллера представления в стеке? Вроде как приложение Почта. Даже если вы убьете приложение, при его запуске вы увидите контроллер представления, содержащий все ваши письма, и кнопку «назад», позволяющую перейти к списку ваших почтовых ящиков.

Спасибо за ваши ответы.

Ответы [ 4 ]

6 голосов
/ 24 февраля 2012

Возможно, вы захотите взглянуть на метод UINavigationController setViewControllers:animated::

Параметры

viewControllers

Контроллеры представления для размещения в стеке. Передний-задний порядок контроллеров в этом массиве представляет новый порядок сверху вниз контроллеров в стеке навигации. Таким образом, последний элемент, добавленный в массив, становится верхним элементом стек навигации.

анимированный

Если ДА, анимируйте нажатие или выталкивание контроллера вида сверху. Если НЕТ, замените контроллеры представления без анимации.

Обсуждение

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

Если анимации включены, этот метод решает, какой тип переход к выполнению в зависимости от того, является ли последний элемент в элементах массив уже находится в стеке навигации. Если контроллер представления в настоящее время в стеке, но не самый верхний элемент, этот метод использует поп-переход; если это самый верхний элемент, нет перехода выполнила. Если контроллер представления не находится в стеке, этот метод использует push-переход. Выполняется только один переход, но когда этот переход завершается, все содержимое стека заменены на новые контроллеры вида. Например, если контроллеры А, B и C находятся в стеке, и вы устанавливаете контроллеры D, A и B, это Метод использует поп-переход, и результирующий стек содержит контроллеры D, A и B.

Наличие

Доступно в iOS 3.0 и более поздних версиях.

Справочник по классам UINavigationController

2 голосов
/ 24 февраля 2012

Вы должны хранить в UserDefaults состояние вашего приложения, когда оно существует. Вы можете сделать это, используя метод делегата приложения - (void)applicationWillTerminate:(UIApplication *)application.

Затем, когда приложение запускается снова, вы извлекаете эту информацию из UserDefaults и инициализируете контроллеры представления, которые хотите иметь в иерархии контроллеров представления. Затем вы добавляете их к UINavigationController, используя метод: setViewControllers:animated:.

1 голос
/ 24 февраля 2012

Используйте popToViewController.

navigationController.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, thirdVC, nil];
[navigationController popToViewController:thirdVC animated:NO];

ПРИМЕЧАНИЕ. Убедитесь, что для анимированного изображения установлено значение NO.

0 голосов
/ 24 февраля 2012

Вы по-прежнему запускаете навигационный контроллер, как обычно, но затем помещаете на него контроллеры второго и третьего вида, прежде чем он отобразится. Поэтому, если вы делаете это в приложении делегата вашего приложения: didFinishLaunchingWithOptions:

UIViewController *firstController = [[[FirstViewCon alloc] initWithNibName:@"MyFirstViewCon" bundle:nil] autorelease];
UIViewController *secondController = [[[SecondViewCon alloc] initWithNibName:@"SecondViewCon" bundle:nil] autorelease];
UIViewController *thirdController = [[[ThirdViewCon alloc] initWithNibName:@"ThirdViewCon" bundle:nil] autorelease];

UINavigationController *theNavCon = [[[UINavigationController alloc] initWithRootViewController:firstController] autorelease];

[theNavCon pushViewController:secondController animated:NO];
[theNavCon pushViewController:thirdController animated:NO];

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