PopTOViewController
У меня есть кнопка с именем "HOME". В этом действии кнопки у меня есть следующий код:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
Когда я нажимаю эту кнопку, мое приложение падает.
Изменяя индекс от 1 до 2, он отлично отображает представление.
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES];
Моя последовательность просмотра - Page1 → Page2 → Page3
Я хочу перейти с Страница 3 на страницу1, но приложение выйдет из строя. От Page3 до Page2 он работает нормально.
Ответы
Ответ 1
Попробуйте это.
Где я написал SeeMyScoresViewController, вы должны написать свой класс View Controller, на который вы должны пойти (например, Class of Home)
NSArray *viewControllers = [[self navigationController] viewControllers];
for( int i=0;i<[viewControllers count];i++){
id obj=[viewControllers objectAtIndex:i];
if([obj isKindOfClass:[SeeMyScoresViewController class]]){
[[self navigationController] popToViewController:obj animated:YES];
return;
}
}
Ответ 2
Если вы хотите перейти в корневой диспетчер представлений (стр. 1), просто используйте:
[self.navigationController popToRootViewControllerAnimated:YES];
Также первый элемент в индексе не является элементом 1, а item 0:
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
Это приведет вас к первому viewController, но будет проще использовать метод popToRootViewController.
Ответ 3
Часто важно сделать это сверху стека, поэтому:
В подклассе UINavigationController или категории:
- (void)popToLast:(Class)aClass
{
for (int i=self.viewControllers.count-1; i>=0; i--)
{
UIViewController *vc = self.viewControllers[i];
if ([vc isKindOfClass:aClass])
{
[self popToViewController:vc animated:YES];
break;
}
}
}
и вы называете это
popToLast:[SomeViewController class];
Ответ 4
Современный способ возврата к определенному контроллеру:
[self.navigationController.viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[MyViewController class]]) {
[self.navigationController popToViewController:obj animated:YES];
*stop = YES;
}
}];
MyViewController - это контроллер, к которому вы хотите вернуться.