Вернуться в главное меню с любого UIViewcontroller

Мне интересно, есть ли какой-нибудь способ вернуться из UIViewController как на 3-4 шага назад, у меня есть главный экран, который будет перемещаться по другому UIViewController через presentModalViewController, на следующем представлении он будет иметь UINavigationBar который будет перемещаться по 4-5 глубин. Я хочу поместить кнопку, которая позволяет пользователю вернуться в дом напрямую, не возвращаясь ко всему представлению, которое он вводит.

спасибо заранее.

3 ответа

Зарегистрируйте контроллер уровня корневого уровня как наблюдатель уведомления, например "POP_TO_ROOT". Когда он получает это уведомление, вызовите метод, чтобы отклонить ваш контроллер модального представления (или что-то еще в стеке).

В вашем стеке viewcontroller любое из видов 4 или 5 уровней может просто разместить уведомление "POP_TO_ROOT".

EDIT: добавить код

В главном "экране" перед вызовом presentModalViewController сделайте следующее:

[[NSNotificationCenter defaultCenter] addObserver:self 
 selector:@selector(handlePopToRoot) 
 name:@"POP_TO_ROOT"
 object:nil];

и добавьте этот метод:

- (void) handlePopToRoot {
 [[NotificationCenter defaultCenter] removeObserver:self 
 name:@"POP_TO_ROOT" 
 object:nil];
 [self.navigationController dismissModalViewControllerAnimated: YES]; 
 }

Затем, находясь глубоко в иерархии viewcontroller, когда вы хотите выйти на весь экран, вам просто нужно отправить уведомление:

[[NSNotificationCenter defaultCenter] postNotification:@"POP_TO_ROOT" object:nil];


Если я правильно понимаю ваш вопрос, вы представляете навигационный контроллер (с контроллером корневого представления, прикрепленным к нему) с вашего "основного контроллера", и вы хотите иметь возможность вернуться к своему "главному контроллеру представления".

Поскольку у вас всегда будет указатель на ваш контроллер навигации, вы должны иметь возможность вызвать dismissModalViewControllerAnimated: с любого из ваших контроллеров просмотра, и он вернет вас обратно к главному контроллеру.

[[self.navigationController parentViewController] dismissModalViewControllerAnimated:YES]


Сохраните свой корневой контроллер просмотра в некотором свойстве и вызовите: - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

licensed under cc by-sa 3.0 with attribution.