如何管理哪个控制器应显示在父视图控制器中?

时间:2019-07-01 12:30:22

标签: ios swift xcode storyboard container-view

我有一个具有5个容器视图的父视图控制器,如您在图像中看到的:enter image description here

但是当我运行我的应用程序时,所有子视图控制器都被逐一显示,然后关闭并返回到我的入门视图控制器(这是初始视图控制器,我将其父导航控制器推入了它)。 我想知道如何防止它,以及当父视图控制器显示时如何显示我的第一个视图控制器?

1 个答案:

答案 0 :(得分:0)

我不知道情节提要出了什么问题,但我的问题是: 因为我将5个容器视图添加到我的主视图控制器中,并通过segue将它们都连接到他们的视图控制器,它呈现了他们所有的视图,然后关闭主视图控制器。 我从情节提要中清除了所有segue和容器视图,并且这样做是这样的:

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/

希望可以帮助其他人:)