iOS - это вопросы о настоящих и пуш-контроллерах
Есть пять controllers here, AViewController, BViewController, CViewController,DViewController,EViewController,
контроллеры здесь,
A present---> B
B present---> C
C push--->D
D push--->E
Теперь, если я хочу вернуться от EViewController к AViewController за один шаг, какой код я должен написать?
4 ответа
[self.navigationController popToRootViewControllerAnimated:animated];
1) Получение желаемого ViewController как показано ниже
for (id controller in [self.navigationController viewControllers])
{
if ([controller isKindOfClass:[AViewController class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
2) Здесь у вас есть контроллеры A,B,C,D,E. означает, что А будет на 1 позиции, так что вы можете сделать
Вы можете жестко связать индекс, как показано ниже
[self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:0] animated:YES];
3) Откройте первый viewController или rootViewController.
[self.navigationController popToRootViewControllerAnimated:animated];
Используйте раскрутить сегу.
В AViewController добавьте ниже код
-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
}
Перейдите в пользовательский интерфейс EViewController и удерживайте нажатой клавишу Ctrl от кнопки (вы хотите установить действие) до выхода "Выход", вы увидите модальное всплывающее окно.
Вы можете сделать это рекурсивно с помощью общего решения. Прежде всего у вас должна быть ссылка на контроллер навигации A, а затем вы должны написать рекурсивный метод для получения активного контроллера навигации, например: `
-(UINavigationController*)getActiveNavigationController : (UINavigationController*)navigationController {
if ([navigationController.presentedViewController isKindOfClass:[AViewController class]]) {
return [self getActiveNavigationController:(UINavigationController*)((AViewController*)navigationController.presentedViewController)
];
}
if ((UINavigationController*)navigationController.presentedViewController == nil) {
return navigationController;
}
return [self getActiveNavigationController:(UINavigationController*)navigationController.presentedViewController];
}
`
После этого вы должны написать метод, как
-(void)getInitialScreen:(UINavigationController*)AViewControllerNavigationController {
if ([AViewControllerNavigationController.presentedViewController isKindOfClass:[AViewController class]]) {
return;
}
UINavigationController *navigation = [self getActiveNavigationController:AViewControllerNavigationController];
[navigation dismissViewControllerAnimated:YES completion:^{
[self getInitialScreen:AViewControllerNavigationController];
}];
}
наконец, после того, как вы написали эти 2 метода. Вы можете позвонить им, как показано ниже, и вы всегда можете получить AViewController
[self getInitialScreen:AViewControlelrnavigationcontroller];
[AViewControlelrnavigationcontroller popToRootViewControllerAnimated:YES];