UIPageViewController subviewcontroller не может выполнить переход на viewDidAppear - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть UIPageController, который содержит два subviewcontroller. При запуске я пытаюсь выполнить переход от SubViewControllerOne к LoginViewController, когда пользователь не авторизован. У меня есть view в viewDidAppear, например, так:

performSegue(withIdentifier: "authorizeSegue", sender: self);

Это приводит к неудачному переходу и предупреждению

Warning: Attempt to present <Volley.LoginViewController: 0x7f98bd801e00> on <Volley.SubViewControllerOne: 0x7f98bd608400> whose view is not in the window hierarchy!

В прошлом я успешно делал это с ViewControllers и TabBarViewControllers.

Когда я оборачиваю segu в таймере или запускаю через IBAction, segue работает отлично. Я считаю, что это как-то связано с PageViewController.

class PageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIScrollViewDelegate {

    var subViewControllers = [UIViewController]()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        self.dataSource = self
        self.edgesForExtendedLayout = [];
        // Do any additional setup after loading the view.

        let subViewControllerOne = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SubViewControllerOne") as! SubViewControllerOne
        let subViewControllerTwo = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SubViewControllerTwo") as! SubViewControllerTwo
        subViewControllers = [yourPodcastViewController, appearancesViewController]
        setViewControllers([subViewControllers[0]], direction: .forward, animated: true, completion: nil)
    }

    required init?(coder: NSCoder) {
        super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
    }

Контроллер навигации и PageViewController enter image description here

Переход от SubViewControllerOne к LoginViewController enter image description here

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Welp, у меня была эта проблема прежде, когда я запускал segues через didSelect для таблиц. Решение состоит в том, чтобы обернуть это в главном потоке. Не уверен, почему это необходимо, но это решает мою проблему.

DispatchQueue.main.async {
  self.performSegue(withIdentifier: "authorizeSegue", sender: self);
}
0 голосов
/ 14 февраля 2020

Я думаю, что из-за жизненного цикла контроллера представления вы должны выполнить переход в viewWillApear

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...