Obj C - Представление контроллеров представления один за другим - PullRequest
0 голосов
/ 02 апреля 2020

Это может быть просто, но я чешу голову, чтобы выяснить проблему.

Я представляю UINavigationController, и как только он отклонен, мне нужно представить еще один, который UITabBarController, когда я делаю это, я получаю ошибку ниже

Предупреждение: попытка представить в , чье представление не находится в иерархии окон!

UINavigationController *nav = [self.storyboard instantiateViewControllerWithIdentifier:@"myWeb"];
MyWebViewController *webVC = (MyWebViewController *)nav.topViewController;
[self presentViewController:webVC animated:YES completion:nil];

Я вижу, что MyWebViewController представлен без каких-либо проблем, как только предыдущий отклонен, я пытаюсь представить следующий, как показано ниже, я получаю вышеупомянутое предупреждение.

MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
[self presentViewController:trController animated:NO completion:nil];

1 Ответ

1 голос
/ 02 апреля 2020

Вам необходимо представить MyTabBarViewController только после того, как MyWebViewController завершит удаление, попробуйте добавить задержку следующим образом:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
    [self presentViewController:trController animated:NO completion:nil];
});

, если это работает, вам нужно будет избавиться от этого (на случай, если вы захотите сохраните ваш код чистым) и вызовите метод делегата внутри completion, сообщающий родителю, что MyTabBarViewController готов к представлению.

...