Как очистить или сбросить историю UINavigation?

#objective-c #uinavigationcontroller #history

#objective-c #контроллер uinavigationcontroller #история #uinavigationcontroller

Вопрос:

У меня есть экран настройки игры, который использует UINavigation, и я пытаюсь сбросить или очистить UINavigation, как только пользователь выбрал цвет.

Текущий процесс моего приложения лучше всего можно описать на следующей схеме:

 Start application -> New game -> Pick character -> Pick Color -> Start game
  

До «Выбрать цвет» я использую UINavigation, однако, когда цвет выбран, я хочу очистить историю UINavigation.

Причина этого заключается в том, что вы не можете вернуться после того, как запустили игру и хотите, чтобы UINavigation начался с чистого листа без указания на то, что вы можете вернуться назад (и это также включает возврат к main menu экрану).

То, как я делаю это прямо сейчас, заключается в следующем;

 [self.navigationController popToRootViewControllerAnimated:YES];

GameDashboardVC *dashboard = [[GameDashboardVC alloc] initWithNibName:@"GameDashboardVC" bundle:nil];
dashboard.title = @"Dashboard"; 
dashboard.managedObjectContext = self.managedObjectContext;

[self.navigationController pushViewController:dashboard animated:YES];

[dashboard release];
  

Проблема в том, что он появляется в RootViewController, но он никогда не помещает панель мониторинга в стек.

Я пытался:

 [self.parentViewController.navigationController pushViewController....]
  

Единственное, что я не пробовал, это поместить мой dashboard push в сам корневой контроллер просмотра, но я обеспокоен, потому что я не уверен, что он вообще должен быть там.

Поэтому, где правильное место для размещения такого рода функциональности, и как мне очистить стек UINavigation.

Спасибо за ваше время / помощь.

Комментарии:

1. Просмотрите свое свойство UINavigationController ViewControllers и выбросьте те, которые вам не нужны?

Ответ №1:

Теперь я решил проблему к своему удовлетворению.

Я поместил следующий код в свой метод initWithNibName:

 self.navigationItem.hidesBackButton = YES;
  

Это скрыло кнопку «Назад», и мне не пришлось ничего открывать, но я думаю, что по соображениям памяти было бы полезно сохранить идею удаления ненужных элементов из стека.

Но на данный момент сойдет и вышеупомянутое.

Комментарии:

1. Я сделал другое решение, в котором я поместил весь материал «new game init» внутри модального представления с его собственной uinavigation. Способ модального просмотра работает так же хорошо, и можно утверждать, что он более логичен. Единственная проблема заключается в том, когда вы удаляете модальный режим и помещаете представление главного меню в стек. Сказав это, кажется, что работает любой способ.

Ответ №2:

Если вы хотите сбросить историю UINavigation, повторно инициализируйте навигационный контроллер.

если вы используете UINavigationController из класса AppDelegate. Вы можете повторно инициализировать историю навигации.

AppDelegate.NavigationController=[[Выделение UINavigationController]инициализация];

Приведенный выше код сбросит историю NavigationController..