Как управлять, какой контроллер должен отображаться в родительском представлении контроллера? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть родительский контроллер представления с представлением 5 контейнеров, как вы можете видеть на изображении: enter image description here

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

1 Ответ

0 голосов
/ 01 июля 2019

Я не знаю, что не так с раскадровкой, но моя проблема заключалась в том, что я добавил 5 контейнерных представлений к своему контроллеру основного вида и соединил их всех с их контроллерами представления, так как он представляет их все, а затем закрыл основной видконтроллер.Я удаляю все виды сегментов и контейнеров из раскадровки, и я сделал это так:

private lazy var firstViewController: AvailableView = {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        var viewController = storyboard.instantiateViewController(withIdentifier: "AvailableViewID") as! AvailableView
        self.add(asChildViewController: viewController)

        return viewController
    }()

    private lazy var secondViewController: NotificationView = {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        var viewController = storyboard.instantiateViewController(withIdentifier: "NotificationViewID") as! NotificationView
        self.add(asChildViewController: viewController)
        return viewController
    }()

    private func add(asChildViewController viewController: UIViewController) {
        addChild(viewController)
        view.addSubview(viewController.view)
        viewController.view.frame = view.bounds
        viewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        viewController.didMove(toParent: self)
    }

    private func remove(asChildViewController viewController: UIViewController) {
        viewController.willMove(toParent: nil)
        viewController.view.removeFromSuperview()
        viewController.removeFromParent()
    }

и способ его использования: в viewDidLoad():

        add(asChildViewController: firstViewController)

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

remove(asChildViewController: firsttViewController)
add(asChildViewController: secondViewController)

вы можете увидеть эту ссылку для более подробного объяснения: https://cocoacasts.com/managing-view-controllers-with-container-view-controllers/

hopeпомогать кому-либо еще:)

...