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];

Другие вопросы по тегам