Следующий код позволит пользователю развернуть иерархию вида, и при нажатии на кнопку, поп-обратно в контроллер просмотра корневой и нажмите новый вид ,
DetailViewController.m ~ контроллер вид, из которого очистить стек навигации:
- (IBAction)buttonPressed:(id)sender {
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"popBack" object:nil]];
}
Приведенный выше код делает вызов NSNotificationCenter
, разместив уведомление о том, что RootViewController может реагировать, когда услышал. Но сначала RootViewController должен зарегистрироваться для получения уведомления.
RootViewController.m
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushViews) name:@"popBack" object:nil];
[super viewDidLoad];
}
Далее RootViewController необходимо настроить ссылочный селектор -pushViews
.
- (void)pushViews {
//Pop back to the root view controller
[self.navigationController popToRootViewControllerAnimated:NO];
//Allocate and init the new view controller to push to
NewViewController *newVC = [[NewViewController alloc] init];
//Push the new view controller
[self.navigationController pushViewController:newVC animated:YES];
}
Убедитесь, что при вызове -popToRootViewControllerAnimated:
, необходимо указать NO
для анимации. Включение анимации вызывает икоту в анимации навигационной панели и смущает систему. Вышеприведенный код при вызове очистит стек навигации, оставив только RootViewController, а затем добавит NewViewController.
Причина, по которой ваш первоначальный код не был полностью выполнен, состоял в том, что после вызова -popToRootViewController:
из вашего элемента управления DetailViewController методы RootViewController заняли основной поток, а DetailViewController был выпущен. Таким образом, никакой дополнительный код не запускался из этого контроллера представления. Используя вышеприведенный код, стек навигации возвращается к тому же контроллеру представления, который загружается.
Я обновил свой ответ. Смотри ниже. –
А теперь я понимаю. У меня есть решение, и я смогу обновить свой ответ в течение ближайших нескольких часов, когда у меня будет время. –
Я обновил свой ответ с помощью проверенного кода.См. Ниже. –